这是一个奇怪的问题。我有创造与需要动画,以免键盘时,将显示一些文本字段创建新用户的iPhone视图控制器,即认为动画上下保持键盘的顶部和下部边缘之间的最小间隙文本字段。当它从登录现有用户屏幕(故事板中的初始视图控制器)以模态方式呈现时,工作正常。self.view.frame不再当动画故事板中的初始视图控制器
于是我决定改变应用一下,让登录/创建用户意见将属于同一个视图控制器。他们过渡如此:
if(accountCreateView == nil) {
UINib *nib = [UINib nibWithNibName:@"NewAccountView" bundle:nil];
NSArray *nibViews = [nib instantiateWithOwner:self options:nil];
accountCreateView = [nibViews objectAtIndex:0];
}
[UIView transitionFromView:(displayingLoginView ? loginView : accountCreateView)
toView:(displayingLoginView ? accountCreateView : loginView)
duration:0.6
options:(displayingLoginView ?
UIViewAnimationOptionTransitionFlipFromRight :
UIViewAnimationOptionTransitionFlipFromLeft)
completion:^(BOOL finished) {
if (finished) {
displayingLoginView = !displayingLoginView;
}
}
];
这工作得很好。但是,执行视图动画的代码不会。当文本字段变为活动状态时,将调用检查文本字段与键盘接近程度的代码,但在执行动画块时不会发生任何情况。
所以我检查:
if([UIView areAnimationsEnabled])
NSLog(@"Animations are enabled");
else
NSLog(@"Animations are disabled");
的动画肯定启用。
所以我把它背进一步viewDidLoad中,尝试一个简单的动画,看看有什么工作,先天下之忧:
CGRect viewFrame = loginNameTextField.frame;
viewFrame.origin.y = 400.f;
[UIView animateWithDuration:1.f
delay:0.f
options:UIViewAnimationOptionCurveEaseInOut
animations:^ {
loginNameTextField.frame = viewFrame;
}
completion:NULL];
这工作得很好!文本字段在窗口中缓慢移动。
这什么都不做,那就是混淆的部分:从self.view.frame设置时
CGRect viewFrame = self.view.frame;
viewFrame.origin.y = 400.f;
[UIView animateWithDuration:1.f
delay:0.f
options:UIViewAnimationOptionCurveEaseInOut
animations:^ {
self.view.frame = viewFrame;
}
completion:NULL];
viewFrame有起源0,20和大小320460预期。
我试过直接设置框架属性:
CGRect viewFrame = self.view.frame;
viewFrame.origin.y = 400.f;
self.view.frame = viewFrame;
貌似我可以改变self.view的子视图的框架,但不是self.view。修复程序可能是离开初始视图控制器作为故事板空白视图以及两者的登录视图中创建xibs和创建用户视图,并加载它们在viewDidLoad中 - 但为什么呢?
编辑:是的,切换视图控制器的故事板版本到一个普通的空视图和加入含有从作为一个子视图确实使动画重新工作一个XIB实际UI的图。尽管如此,仍然不知道为什么。
这是一个好主意,我可以看到它是方便,自动滚动(或更改表的框架,然后用scrollToRowAtIndexPath),但认为是比这一点更复杂为什么我需要转移包含的视图。 – 2012-02-01 22:14:32
好的。我想我也会添加到我的帖子中,在某些情况下,它也有助于在UITableView中具有页眉和页脚视图。如果有帮助,你可以在这些地方放置更复杂的东西。当然,这限制了你将艰难的东西放在桌子视图的顶部和底部,这可能不是你想要的,这取决于你的设计。 – Rob 2012-02-02 10:40:57