2011-03-07 4 views
1

Я просмотрел блоги и документацию Apple и не могу найти ответ. Надеюсь, кто-то сможет предоставить свой опыт.iOS UIView Transition, Container View Creation Issue

У меня есть простая анимация UIView, которая действует на вид контейнера 'gameContainer'. Если я создам этот вид контейнера в методе, который называется ранее, все хорошо и хорошо.

Однако, когда я создаю «gameContainer» непосредственно перед анимацией вызовов (код ниже), то подвид «viewGrid» просто появляется без какого-либо эффекта анимации.

-(IBAction) onInfoUp: (id) sender { 
    //Add a container UIView for animation  
    [self.view addSubview:gameContainer]; // Moving this line to 'viewDidLoad' cures problem 

    //Call animation methods 
    [UIView beginAnimations:@"newGrid" context:nil]; 
    [UIView setAnimationDuration:1.3]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft 
         forView:gameContainer cache:YES]; 
    [gameContainer addSubview:viewGrid]; 
    [UIView commitAnimations]; 
} 

Я в тупике, почему я должен определить контейнер subview в отдельном методе! Заранее спасибо.

ответ

1

Я считаю, что это связано с тем, как UIKit обновляет визуальное содержимое на экране. Все фактические изменения экрана происходят в конце текущего цикла выполнения, если он выполняется в основном потоке или в конце следующего цикла запуска в основном потоке в противном случае. Если вы добавите GameContainer, как показано в коде, это не на уровне представления для экрана.

+0

Cheers @MHC. Я думал, что это может быть связано с циклами перерисовки, но не может найти никакого справочного материала. Я попытался выполнить mid-loop вызова _'setNeedsDisplay'_ до анимации, но не успел. –