我在导航栏中有一个seachButton,按照方法点击调用:
- (IBAction)search:(id)sender
{
if (nil == searchViewController)
searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];
searchViewController.view.backgroundColor = [UIColor clearColor];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown
forView:searchViewController.view
cache:NO];
[self.view addSubview:searchViewController.view];
[UIView commitAnimations];
}
它应该加载包含带有UISearchBar和两个按钮的视图的SearchViewController.xib。当我第一次调用搜索方法时,视图会很快出现一些奇怪的动画,当我再次调用它时,动画就可以了。有没有人知道什么可能是错的?
答案 0 :(得分:1)
将这两个视图添加到appdelegate中的窗口,我遇到了同样的问题并且这有效。奇怪,因为我稍后会从superview中删除它们但它仍在工作。
答案 1 :(得分:0)
在调用view方法之前,UIViewController不会加载其视图。我想问题是第一次调用动画时未加载视图。您可以尝试修改代码,如下所示:
if (nil == searchViewController) {
searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];
searchViewController.view;
}
答案 2 :(得分:0)
尝试将动画代码放在viewDidLoad函数中。这样可以确保nib文件中的所有资源和视图都已加载,并且可以由您的应用程序使用。
- (IBAction)search:(id)sender
{
if (nil == searchViewController)
searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];
[self.view addSubview:searchViewController.view];
}
-(void)viewDidLoad
{
self.view.backgroundColor = [UIColor clearColor];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown
forView:self.view
cache:NO];
[UIView commitAnimations];
}
答案 3 :(得分:0)
尝试将动画代码放入viewDidAppear:
方法而不是viewDidLoad:
(Chris上面建议)。
一般来说,我在viewDidLoad:
中查看相关内容时遇到了问题。但是在viewDidAppear:
中执行这些操作总是有帮助的(我可能会遗漏一些导致此行为的微妙之处)。