我正在尝试使用不同的动画替换另一个复杂视图,例如移动到左/右/上/下。第一个和第二个视图包含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 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模拟器和 iPhone 4S ,但它落后于 iPhone 4 。滞后我的意思是12-15 FPS。
如何加快这个动画?
center
属性而不是frame
吗?UIImageView
并为其制作动画吗?UIScrollView
中布置我的观点并致电scrollRectToVisible:animated:
吗?请解释一下为什么我的动画代码这么慢?当我的两个视图包含10-20个按钮时 - 速度没有问题......
答案 0 :(得分:1)
您需要发布更多代码,因为设置新框架不应该太过性能损失。但是,您可以对视图layer
或drawRect:
中的视图进行操作,这会使绘图和动画速度大幅下降。
例如:
myView.layer.shadowOffset = CGSizeMake(0.0, 10.0);
myView.layer.shadowRadius = 10;
myView.layer.shadowOpacity = 0.40;
为视图添加一个漂亮的投影会杀死动画。所以在这种情况下,我在动画时关闭阴影,完成后再次打开。
如果没有看到更多的代码,就无法说出问题所在。
修改强>
要加快渲染阴影,您可以将shouldRasterize
属性设置为YES
。这会强制图层创建阴影的位图,而不是尝试每帧重绘一次。
答案 1 :(得分:1)
请尝试以下方法之一:
oldView.transform = CGAffineTransformMakeTranslation(0, height);
答案 2 :(得分:0)
要添加,如果您使用显式动画但仍设置可设置动画的属性,则需要使用以下命令禁用隐式动画:
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];