从一个UIView到另一个UIView的过渡更平滑

时间:2012-08-13 14:02:48

标签: objective-c ios uiview uiviewcontroller core-animation

我有一个UIViewController,它有多个子视图。每个子视图都是UIView子类,我想通过点击工具栏按钮在视图之间切换。我是通过使用动画块来完成的:

示例:

[UIView animateWithDuration:0.5 
                      delay:0.0 
                    options:UIViewAnimationOptionTransitionFlipFromRight 
                 animations:^{
                         [StoreView removeFromSuperview];
                         [self.view addSubview:HomeView]; 
                     }
                 completion:NULL];

实际上一切都很好。问题是过渡并不是很顺利。例如,HomeView分散了五个按钮(作为设计的一部分),每当我从一个视图切换到HomeView时,这些按钮将来自一个角落并在转换后重新排列,看起来不是很漂亮。

那么我将如何使这些按钮保持原位?

1 个答案:

答案 0 :(得分:0)

使用复杂的子视图制作动画时,有时会遇到不良后果。不仅会出现一些奇怪的现象,而且根据视图结构的复杂性,它们有时会很昂贵。我要做的一个建议是,不是动画复杂的视图本身,你可以将视图渲染到图形上下文,并在UIImageView中动画生成的图像,使用手法使你看起来像是动画视图层次结构。在此效果中,您可以避免在HomeViewStoreView上进行复杂转换,而是使用UIImageView实例进行简单翻转。请考虑以下示例代码:

UIImageView *storeImage = //  pointer to the image rendered to a graphics context
UIImageView *homeImage =  //  pointer to the image rendered to a graphics context

[self.view addSubview:storeImage];
[storeView removeFromSuperview];

[UIView animateWithDuration:0.5 
                      delay:0.0 
                    options:UIViewAnimationOptionTransitionFlipFromRight 
                 animations:^{
                         [storeImage removeFromSuperview];
                         [self.view addSubview:homeImage]; 
                     }
                 completion:^(BOOL finished) {
                     [self.view addSubview:homeView];
                     [homeImage removeFromSuperview];
                 }];