UIView动画第一次不起作用

时间:2010-05-05 13:53:28

标签: iphone objective-c ios animation

我在导航栏中有一个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。当我第一次调用搜索方法时,视图会很快出现一些奇怪的动画,当我再次调用它时,动画就可以了。有没有人知道什么可能是错的?

4 个答案:

答案 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:中执行这些操作总是有帮助的(我可能会遗漏一些导致此行为的微妙之处)。