iPhone视网膜显示中的UIView动画并不流畅

时间:2012-06-08 06:57:45

标签: iphone animation uiview retina-display

我想要一个uiview的汇总动画。所以我正在为mainscrollview和rollupboard制作动画。所以在viewDidLoad中我将这两个视图的框架设置为:

    dashRollUpStand=[[UIImageView alloc]initWithFrame:CGRectMake(0,346,320,0)];
    mainScrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(10,346,300,0)];

我还有这个mainScrollView的许多子视图。

现在我使用以下代码加载此视图并使用汇总动画:

 [UIView beginAnimations:nil context:nil];
 [UIView setAnimationDuration:1];
 [UIView setAnimationCurve:UIAnimationCurveLinear];

 [dashRollUpStand setFrame:CGRectMake(0,0,320,346)];
 [mainScrollView setFrame:CGRectMake(10,9,300,337)];
 [UIView commitAnimations];

此累积动画在iphone中运行正常。但是在iphone视网膜显示屏上这个动画一点都不流畅。那么我怎样才能在iphone视网膜显示屏上保持平滑。

2 个答案:

答案 0 :(得分:0)

您是否有理由在viewDidLoad中添加视图并将其置于屏幕外?

在我看来,你应该这样做。在下面的代码中,containerView包含您的观看次数的视图toView是您正在翻转的视图,而fromView是您正在从翻转的视图。

[UIView transitionWithView:containerView
                  duration:1.0
                   options:UIViewAnimationOptionTransitionFlipFromRight
                animations:^{ 
                    [fromView removeFromSuperview]; 
                    [containerView addSubview:toView]; 
                }
                completion:NULL];

我还选择使用自iOS 4以来基于块的动画/转换API the recommended way

编辑:

由于您实际上并未转换视图,即使您的原始代码确实如此。你可以使用普通的动画块来代替

[UIView animateWithDuration:1.0
                 animations:^{
                     [dashRollUpStand setFrame:CGRectMake(0,0,320,346)];
                     [mainScrollView setFrame:CGRectMake(10,9,300,337)];
                 }
                 completion:NULL];

答案 1 :(得分:0)

问题不在于您使用的动画类型,但更可能的是您的观点。首先尝试确保动画视图中的子视图是不透明的,不透明是UIView的属性,但是如果视图的alpha小于1,则覆盖它。渲染系统需要更多的clicles来混合清晰的视图,如果你可以选择不透明的。