[英]My UIView animation is jerky - how can I optimize the following code?
在模拟器上,我的动画方法运行顺畅。 不幸的是,它似乎在iPhone 4上非常生涩。
我不是100%确定最好和最快的动画制作方法 - 所以任何有关如何优化或完全修改我的代码以加快动画的提示都将非常感激!
笔记:
它已经在主线程上,所以这使得'dispatch_async(dispatch_get_main_queue())'调用无关紧要或无益吗?
有没有办法预先缓冲这个动画?
有没有办法确切地看到代码的哪个部分正在减速?
extensionView.subviews中只有大约3或4个视图。
我用-Os编译了。
- (void)extendWithAnimation:(BOOL)animated; {
isExtended = YES;
extensionView.hidden = NO;
topShadowView.hidden = NO;
topShadowView.frame = CGRectMake(0, defaultHeight, topShadowView.frame.size.width, topShadowView.frame.size.height);
topShadowView.layer.bounds = CGRectMake(0, 0, topShadowView.frame.size.width, 0);
extensionView.frame = CGRectMake(0, defaultHeight - 8, DEVICE_WIDTH, extensionHeight + 8);
extensionView.layer.bounds = CGRectMake(0, 0, DEVICE_WIDTH, 0);
for (UIView *view in extensionView.subviews) {
view.transform = CGAffineTransformMakeTranslation(0, -(extensionHeight+8));
}
dispatch_async(dispatch_get_main_queue(), ^{
if (animated) {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];
[UIView setAnimationDelegate:self];
}
extensionView.layer.bounds = CGRectMake(0, 0, DEVICE_WIDTH, extensionHeight + 8);
topShadowView.layer.bounds = CGRectMake(0, 0, topShadowView.frame.size.width, extensionHeight + 8);
for (UIView *view in extensionView.subviews) {
view.transform = CGAffineTransformIdentity;
}
if (animated) {
[UIView commitAnimations];
}
});
}
解:
解决了(谢谢亚伦!)。
渲染阴影杀死动画很大的时间! 如果您计划制作动画,请不要使用任何核心图形阴影属性 - 在我的情况下,只有几个阴影会将帧速率降低三倍。
[UIView animateWithDuration:.3 animations:{ code... }];
通过Instruments运行代码(从Time Profiler开始)。 什么电话在动画期间占用的时间最多?
一旦您对其进行了分析,也可以通过Core Animation工具运行它,并启用屏幕外渲染和非不透明内容的着色。 这有助于隔离常见的图形问题。
我也注意到你提到了阴影。 如果您使用的是CALayer阴影属性,则可能会导致性能下降。 但我们需要更多的信息来真正解决这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.