gpt4 book ai didi

swift - 如果我使用的是 UIView.animate,我 Mac 的 CPU 负载高达 200%

转载 作者:可可西里 更新时间:2023-11-01 01:48:44 27 4
gpt4 key购买 nike

enter image description here如果我对 28 个 UIViewImages 使用 UIView.animate,其中它们的 alpha 从 alpha = 0 更改为 alpha = 0.5。模拟器将我的 Macbook CPU 加载到 200%,但 XCode 调试导航器中的模拟器仅显示 0-4% 的 CPU 负载。如果我在 iPhone X 上运行该应用程序,一切都一样。 iPhone CPU 为 0-4%,但设备温度很高。如果我是评论动画功能,应用程序运行良好,iPhone 温度正常。 28 View 同步动画是正常情况吗?还是不应该这样?

添加 View 的函数

func addView() { 
for _ in 0...27 {
imageViews.append(UIImageView(image: UIImage(named: "logo_main")))
}
imageViews.forEach{ (view) in
view.contentMode = .scaleAspectFill
view.center = CGPoint(x: bounds.midX, y: bounds.maxY + view.bounds.size.height)
addSubview(view)
}
layoutIfNeeded()
}

动画背景功能

func animateBackground() {
self.imageViews.forEach { view in
view.alpha = 0
let rand = TimeInterval(self.imageViews.count.arc4random)
UIView.animate(withDuration: 3,
delay: rand,
options: [.repeat, .autoreverse, .curveEaseInOut],
animations: { view.alpha = 0,5 },
completion: nil)

}
}

这是应用程序的正常行为吗?也许还有另一种方法可以使动画背景闪烁?

最佳答案

我认为您不应该通过将 28 个 View 相互堆叠来创建动画

我认为您的代码的主要问题是颜色混合层。您在屏幕上看到的最终像素是顶层像素和所有底层像素的合成(即混合)。因此,必须渲染每个底层以创建您在屏幕上看到的最终像素。但是,如果图层是不透明的,则通过不绘制底层图层来优化合成过程。例如,如果你将 28 个 ImageView 相互堆叠,它不会对可视化过程造成太大影响,因为除了最上面的 ImageView 之外的所有 ImageView 都不会被渲染。

不幸的是,在您的源代码中没有优化,因为您不断更改相互堆叠的 ImageView 的 alpha 属性。在最坏的情况下,必须对所有 28 个 ImageView 执行混合过程。您可以通过在模拟器中检查“调试 > 颜色混合图层”来检查动画中是否存在“颜色混合”。

“颜色混合层”会显着降低应用的性能。我建议您通过更新单个 ImageView 中的图像或至少减少动画中的 View 数量来创建动画。

附言我不确定我是否完美地检测到您的性能问题。如果不是,您可以在此线程中找到有关优化渲染性能的更多信息:What triggers offscreen rendering, blending and layoutSubviews in iOS?

关于swift - 如果我使用的是 UIView.animate,我 Mac 的 CPU 负载高达 200%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56595749/

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