gpt4 book ai didi

iphone - 我的 UIView 动画不稳定 - 如何优化以下代码?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:00:02 24 4
gpt4 key购买 nike

在模拟器上,我的动画方法运行顺利。不幸的是,它在 iPhone 4 上运行时似乎非常不稳定。

我不是 100% 确定什么是制作动画的最佳和最快方法 - 所以任何关于我如何优化或完全修改我的代码以加速此动画的提示将不胜感激!

注意事项:

它已经在主线程上了,那么这是否会使“dispatch_async(dispatch_get_main_queue())”调用变得无关紧要或毫无帮助?

有没有办法预先缓冲这个动画?

有没有一种方法可以准确地查看是代码的哪一部分造成了大部分的减速?

extensionView.subviews 中只有大约 3 或 4 个 View 。

我已经用 -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];
}
});
}

解决方案:

已解决(感谢 Aaron!)。

渲染阴影杀死动画大时间!如果您计划制作动画,请不要使用任何核心图形阴影属性 - 在我的例子中,仅几个阴影就会将帧速率降低三倍。

最佳答案

  1. 好吧,如果代码已经在主队列中,那么使用 dispatch_async 只会产生开销。
  2. 我不知道这是否有帮助(我有点怀疑),但您可以尝试使用 [UIView animateWithDuration:.3 animations:{ code... }];<
  3. 在我过去处理阴影的尝试中,它们往往会对性能造成很大影响。您可能会考虑单独保留阴影和图层,而是创建一个可调整大小的阴影 PNG,您可以在放置在要添加阴影的 View 后面的 UIImageView 中使用它。

关于iphone - 我的 UIView 动画不稳定 - 如何优化以下代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8859366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com