2013-04-15 26 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只能在主线程中使用。

相关问题