在完全重建UIView的地方动画UIView更改

时间:2012-06-14 11:48:18

标签: iphone ios uiview uiviewcontroller core-animation

我的UIViewController获取它控制的视图,用这样的东西完全重建自己:

[self.view rebuildYourself:bIsLandscape]; // this line is in the ViewController

视图本身包含以下方法:

-(void)rebuildYourself:(BOOL)isLandscape
{
    NSArray *viewsToRemove = [self subviews];
    for (UIView *v in viewsToRemove) {
        [v removeFromSuperview];
    }

    [self addControls]; // adds lots of views
    [self layoutControlsWithOrientation:isLandscape]; // frames the views

}

我想为整个过渡制作动画。我试过这个:

[UIView animateWithDuration:1.0
                      delay:0.0
                    options:UIViewAnimationOptionTransitionCurlUp
                 animations:^{
                             [self.view rebuildYourself:bIsLandscape];
                         }
                 completion:^(BOOL finished){

                         }];

但动画会忽略UIViewAnimationOptionTransitionCurlUp的选项值,并且每次都从左上角流入。

我试过这个:

[UIView beginAnimations:@"kkk" context:nil];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
[UIView setAnimationDuration:1.0];
[self.view rebuildYourself:bIsLandscape];
[UIView commitAnimations];

但是在这种情况下,转换确实很好地卷曲,但是在转换完成之前底层视图是空白的,然后新视图突然“弹出”进入视图,这会破坏转换的效果。

任何人都可以告诉我动画转换动画的正确/最佳方式吗?

由于

1 个答案:

答案 0 :(得分:3)

制作两个视图并将旧视图置于新重建视图之上。然后'卷起'旧视图,以便新视图显示并从内存中删除旧视图。