Objective c iOS核心动画加速
我正在尝试使用不同的动画将一个复杂视图替换为另一个复杂视图,例如移动到左/右/上/下。第一视图和第二视图包含30-40个子视图(按钮)。我的代码如下:Objective c iOS核心动画加速,objective-c,ios,ios5,core-animation,transition,Objective C,Ios,Ios5,Core Animation,Transition,我正在尝试使用不同的动画将一个复杂视图替换为另一个复杂视图,例如移动到左/右/上/下。第一视图和第二视图包含30-40个子视图(按钮)。我的代码如下: oldView.alpha = 1; newView.alpha = 0; oldView.frame = CGRectMake(0, 0, width, height); newView.frame = CGRectMake(0, -height, width, height); // begin animation // setting d
oldView.alpha = 1;
newView.alpha = 0;
oldView.frame = CGRectMake(0, 0, width, height);
newView.frame = CGRectMake(0, -height, width, height);
// begin animation
// setting duration 0.3
// ...
oldView.alpha = 0;
newView.alpha = 1;
oldView.frame = CGRectMake(0, height, width, height);
newView.frame = CGRectMake(0, 0, width, height);
// commit animation
// ...
它在iPhone模拟器和iPhone4S上运行良好,但在iPhone4上运行滞后。我说的滞后是指每秒12-15帧
如何加速此动画
- 我应该使用
属性而不是center
frame
- 我是否应该将视图渲染到
,并设置它们的动画UIImageView
- 我是否应该在
中布局视图并调用UIScrollView
scrollRectToVisible:animated:
请解释一下为什么我的动画代码这么慢?当我的两个视图包含10-20个按钮时-速度没有问题…您需要发布更多代码,因为设置新帧不会对性能造成太大影响。但是,您可以使用视图的
层
或drawRect:
执行一些操作,这会大大降低绘图和动画的速度
例如:
myView.layer.shadowOffset = CGSizeMake(0.0, 10.0);
myView.layer.shadowRadius = 10;
myView.layer.shadowOpacity = 0.40;
这会在视图中添加一个漂亮的阴影,这将终止动画。因此,在本例中,我在设置动画时关闭阴影,完成后再次打开阴影
如果看不到更多的代码,就不可能说出问题所在
编辑:
要加快阴影的渲染速度,可以将
shouldRasterize
属性设置为YES
。这将强制层创建阴影位图,而不是尝试每帧重新绘制一次。请尝试以下操作之一:
- 改变中心而不是框架
- 使用“变换”属性而不是“帧”
oldView.transform=CGAffineTransformMakeTransform(0,高度)代码>
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
“我的视图”有7*5个按钮矩阵,采用粗体系统字体,只有
阴影偏移量(0,1)
。我正在尝试实现自定义日历控件。为了进行测试,请去掉阴影,看看这是否会提高性能。如果是,您可以使用shouldRasterize属性并将其设置为yes。这将停止在每一帧重新绘制阴影。您的意思是应该光栅化每个按钮标题层的属性吗?有趣的属性…我今天晚上会尝试这种方式。好的,我们需要进一步缩小范围。你把阴影完全去掉了吗?如果是这样的话,这会加快速度吗?好的,我今晚就试试。也许你可以推荐任何关于核心动画属性性能的文章?这不是核心动画。CoreAnimation是关于处理直接CALayer动画的。您正在谈论UIView动画:但是,请记住,更改视图的帧将触发setNeedsDisplay,从而从文档中获得完整的视图重画:更改帧矩形将自动重新显示接收器,而无需调用drawRect:
方法。如果希望在框架矩形更改时调用drawRect:方法,请将contentMode
属性设置为UIViewContentModeRedraw