2015-04-14 33 views
0

我創建了一個帶有一些UIElements(標籤,按鈕,TextField)的IBOutletCollection,我想在特殊事件上移動它。設置IBOutletCollection中所有項目的框架值

這就是我到目前爲止有:

@IBAction func moveDown(sender: UIButton) { 
    UIView.animateWithDuration(0.4, animations: { 
      for subview in self.moveOutViews { 
       var offset = CGFloat(700); 
       var newY = subview.frame.origin.y + offset; 
       subview.frame = CGRectMake(subview.frame.origin.x, newY, subview.frame.size.width, subview.frame.size.height); 
      } 
      }, completion: { 
       (value: Bool) in 
       UIView.commitAnimations(); 

     }); 
} 

我現在的問題是,當動畫完成,我想對新位置的UI元素(文本字段)進行交互,所有的意見「'回到原點位置。

莫比這是一個問題,即「發件人」是的IBOutletCollection一部分?

這是一款適用於iOS 8.3應用的iPad,我使用的是Swift。

編輯:我用UIScrollView做了一個解決方法。但我想知道爲什麼第一個想法不起作用。

+0

問題可能是您的約束條件是設置項目的位置,一旦這些約束被重新應用,那麼您的手動更改爲框架被覆蓋。如果您爲第一個項目的Y位置約束設置IBOutlet,然後將所有其他項目的Y位置設置爲與第一個對象對齊,那麼您只需修改約束IBOutlet的常量並調用setNeedsLayout – Paulw11

+0

即可沒有限制。 我已經嘗試了你的想法,但仍然是同樣的問題。 – Stone

+0

爲什麼在完成塊中調用'UIView.commitAnimations()'?這個調用對基於塊的動畫是不必要的 – Paulw11

回答

0

因爲我們不知道你的看法如何設置,我將不得不猜測,這是兩件事情之一:

  1. 像@ Paulw11在他的評論暗示。您正在編輯由約束保留的視圖幀。當視圖再次佈置時,所有視圖都會回到由約束確定的位置。儘管你說你沒有使用約束,但可能會爲你的視圖啓用translatesAutoresizingMaskIntoConstraints,或者你的xib/storyboard設置爲使用約束,因此會自動爲你生成約束。檢查這種情況的一種方法是隻記錄子視圖的constraints屬性。

  2. 你的代碼中的其他地方的代碼正在改變你的視圖的位置,它被無意中調用。

+0

我如何向您展示視圖的設置? 要點1:日誌只顯示'(功能)' 要點2:絕對沒有。 – Stone

+0

如果您正在使用storyboard/xib,則無法顯示它。如果是這種情況,請檢查故事板/ xib的「實用程序」面板(右側)>「文件檢查器」>「接口生成器文檔」中的「使用自動佈局」。否則,只需發佈​​您用於創建視圖的代碼示例。 –

+0

是的,我正在使用一個xib視圖。使用自動佈局被選中。 – Stone

相關問題