UIView анимация не работает в первый раз - PullRequest
0 голосов
/ 05 мая 2010

У меня есть 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];
}

Он должен загрузить SearchViewController.xib, который содержит представление с UISearchBar и двумя кнопками. Когда я вызываю метод поиска в первый раз, представление появляется очень быстро с какой-то странной анимацией, когда я вызываю его снова, анимация в порядке. У кого-нибудь есть подсказка, что может быть не так?

Ответы [ 4 ]

1 голос
/ 22 сентября 2010

Добавьте оба вида окна в appdelegate, у меня была та же проблема, что и у вас, и это сработало.Странно, потому что позже я удаляю их из суперпредставления, но оно все еще работает.

0 голосов
/ 06 мая 2010

Попробуйте поместить код анимации в функцию viewDidLoad. Это гарантирует, что все ресурсы и представления из файла пера были загружены и могут использоваться вашим приложением.

- (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];
}
0 голосов
/ 08 мая 2010

Попробуйте поместить код для анимации и просмотра загрузки в метод viewDidAppear: вместо viewDidLoad: (который Крис предложил выше).

В общем, у меня были проблемы с просмотром связанных вещей в viewDidLoad:. Но выполнение этих действий в viewDidAppear: всегда помогало (возможно, мне не хватает тонкости, которая вызывает такое поведение).

0 голосов
/ 05 мая 2010

UIViewController не загружает свое представление, пока не будет вызван метод представления. Я думаю, проблема в том, что представление не загружается при первом вызове анимации. Вы можете попробовать изменить свой код следующим образом:

if (nil == searchViewController) {
    searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];
    searchViewController.view;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...