2015-06-26 195 views
0

我试图在前视图和后视图之间翻转,就像一本书的页面。我在视图控制器中运行了以下测试代码,并没有发生动画。我只看到后视图(红色方块)静态显示2秒。怎么了?UIView翻转动画不是动画

UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)]; 
    containerView.backgroundColor = [UIColor greenColor]; 
    [self.view addSubview:containerView]; 

    UIView *backView = [[UIView alloc] initWithFrame:containerView.bounds]; 
    backView.backgroundColor = [UIColor redColor]; 
    [containerView addSubview:backView]; 

    UIView *frontView = [[UIView alloc] initWithFrame:containerView.bounds]; 
    frontView.backgroundColor = [UIColor blueColor]; 
    [containerView addSubview:frontView]; 

    [UIView transitionFromView:frontView 
         toView:backView 
        duration:2.0 
        options:UIViewAnimationOptionTransitionFlipFromRight 
         | UIViewAnimationOptionShowHideTransitionViews 
        completion:^(BOOL finished) { 
        [containerView removeFromSuperview]; 
        }]; 

回答

0

如果你宣布你frontViewbackViewcontainerView为高德:

@interface yourViewController() 
{ 
    UIView *backView; 
    UIView *frontView; 
    UIView *containerView; 
} 

然后将您的视图的初始化代码中viewDidLoad

UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)]; 
containerView.backgroundColor = [UIColor greenColor]; 
[self.view addSubview:containerView]; 

UIView *backView = [[UIView alloc] initWithFrame:containerView.bounds]; 
backView.backgroundColor = [UIColor redColor]; 
[containerView addSubview:backView]; 

UIView *frontView = [[UIView alloc] initWithFrame:containerView.bounds]; 
frontView.backgroundColor = [UIColor blueColor]; 
[containerView addSubview:frontView]; 

最后内将您的动画代码方法:

- (void)flippingViewTransitionAnimation 
{ 
    [UIView transitionFromView:frontView 
         toView:backView 
         duration:2.0 
         options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews 
        completion:^(BOOL finished) { 
        [containerView removeFromSuperview]; 
    }]; 
} 

然后从viewDidAppear中调用上述方法,您应该可以看到动画运行。

+1

我找到了问题的原因。您只能在绘制完成后对其进行动画处理。因此,您不能在同一个运行循环中创建视图并对它们进行动画处理。您的解决方案是将动画延迟到稍后运行循环的一种方法。也可以使用performSelector延迟动画。 – JoJo