2013-04-15 27 views
1

我在滑出視圖的其他內容時將UIView滑入另一個內存時出現了一個奇怪的問題。連續調用一些[UIVIew setFrame:]不會執行所有這些

這是代碼:

- (void)moveAddStudentViewIntoSuperView 
{ 
    CGRect viewFrame1 = self.viewThatShoudlDisappear1.frame; 
    CGRect viewFrame2 = self.viewThatShoudlDisappear2.frame; 
    CGRect newFrame = self.viewControllerThatshouldAppear.view.frame; 

    viewFrame1.origin.x = -300; 
    viewFrame2.origin.x = -300; 
    newStudentFrame.origin.x = 0; 

    NSLog(@"\n 1: %@ \n 2: %@ \n 3: %@", self.viewThatShoudlDisappear1, self.viewThatShoudlDisappear2, self.viewControllerThatshouldAppear.view); 

    [self.viewThatShoudlDisappear1 setFrame:viewFrame1]; 
    [self.viewThatShoudlDisappear2 setFrame:viewFrame2]; 
    [self.viewControllerThatshouldAppear.view setFrame:newFrame]; 

    NSLog(@"\n 1: %@ \n 2: %@ \n 3: %@", self.viewThatShoudlDisappear1, self.viewThatShoudlDisappear2, self.viewControllerThatshouldAppear.view); 

} 

(通常我會做setFrame S IN一UIView動畫,但因爲它沒有工作,無論如何也不要緊,這個例子)

會發生什麼情況是應該滑入的視圖或者現在位於(0,0)出現,但其他視圖不會移開。並且仍然在新視圖下顯示。

奇怪的是,日誌輸出的所有視圖都處於正確的位置。 [self.view setNeedsLayout]之間的setFrame調用不會改變任何東西,更有趣的是,如果我從新視圖中刪除setFrame,應該消失的視圖確實會消失。

+0

很明顯,當我寫這篇文章時我並不是那麼專注。代碼示例現在應該是正確的。抱歉。 – Phil

+0

你有沒有試過要求他們重新粉刷? –

回答

0

好吧,我想我不完全理解AutoLayout。由於Tototip,我試圖在iOS 5下測試它,並且必須在任何地方停用AutoLayout才能運行它。

它立即與iOS 5一起工作。之後,我切換回iOS 6而無需再次激活AutoLayout,它也可以完美地工作。

我的解決方案是:停用XIB文件中的AutoLayout。

但我想不出一種方式,這應該是一個默認行爲。也許我錯過了AutoLayout的一點,或者這是一個奇怪的錯誤。一旦我和更多的開發者交談,我可能會提交一個bugreport,如果有必要的話。

+0

我的經驗是,自動佈局*是一個奇怪的錯誤。 –

0

有在這一行一個錯字:

CGRect viewFrame2 = self.viewThatShoudlDisappear1.frame; 

據推測,這應該是:

CGRect viewFrame2 = self.viewThatShoudlDisappear2.frame; 
+0

謝謝 - 編輯它。我不得不改變var名稱的原因;) – Phil

0

我見過這樣奇怪的事情時,我不小心從背景中使用的UIKit線。 UIKit只能在主線程中使用。

相關問題