为什么不断设置动画的 UIActivityIndicator 不会阻塞主线程?
Why is that constantly animating UIActivityIndicator won't block main thread?
我们都显示 activity 指示器,而一些冗长的操作在后台进行。尽管 activity 指示器显示一个不断旋转的轮子,但它不会给主线程带来负担,因为同一屏幕中的其他 UIComponents
仍然会对触摸做出反应。
我认为我知道的:
我知道所有触摸事件都由主线程处理,并且主队列用于对事件进行排队。考虑到主队列是序列化队列,并且在任何给定时间点一次只能执行一个任务 运行,小巷触摸事件应该在主队列中排队,而我的主线程正忙于刷新 screen/calling UIActivityIndicator 的 drawrect。
学习:
我查看了第三方 activity 指标的代码。他们中的大多数人使用 CABasicAnimation
并总是在动画上调用 repeat 。虽然很少有工作直接使用 NSTimer 重复调用 drawrect
并有一个小的延迟。他们的代码之所以有效,是因为调用 drawrect
时有一个小的延迟,并且方法 drawrect
本身是轻量级的。
None 它不会减轻主线程的负载,而是小心地将负载放在主线程上,足以让动画继续运行,同时让主线程可以自由处理触摸事件
我想知道的:
1 - 这个实施 activity 指标的策略是否正确?或这样的陈述
self.timer =[NSTimer timerWithTimeInterval:0.1 target:self
selector:@selector(setNeedsDisplay) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
我在第三方的一个activity指标中看到有什么特别的效果吗?
2 - 如果我 运行 CABasicAnimation/transaction 并永远重复动画,与手动重复调用 setNeedsDispaly/drawrect 相比,它对主线程的负载有什么特殊影响吗?
我不确定它是否有助于实现您自己的 activity 指标,但系统 UIActivitiyIndicatorView
只是一个 UIImageView
,包含 12 个图像的数组,用于替换随着时间的推移彼此。
Apple 通过使他们的微调器离散来制作一个非常巧妙的技巧。它允许他们有一个简单的实现,不会在 CPU.
上产生任何计算负载
UPD
返回你想知道的事情:
1 - 不是,因为在 drawRect
中实现手动画框完全由 CPU 完成。 2 - 我不能肯定地说,但如果有人相信 Apple 在文档和视频中关于 Core Animation
的说法,那么它已经过高度优化并在 Metal
上运行或至少 OpenGL
在下方,因此可以利用 GPU 的强大功能。
我们都显示 activity 指示器,而一些冗长的操作在后台进行。尽管 activity 指示器显示一个不断旋转的轮子,但它不会给主线程带来负担,因为同一屏幕中的其他 UIComponents
仍然会对触摸做出反应。
我认为我知道的:
我知道所有触摸事件都由主线程处理,并且主队列用于对事件进行排队。考虑到主队列是序列化队列,并且在任何给定时间点一次只能执行一个任务 运行,小巷触摸事件应该在主队列中排队,而我的主线程正忙于刷新 screen/calling UIActivityIndicator 的 drawrect。
学习:
我查看了第三方 activity 指标的代码。他们中的大多数人使用 CABasicAnimation
并总是在动画上调用 repeat 。虽然很少有工作直接使用 NSTimer 重复调用 drawrect
并有一个小的延迟。他们的代码之所以有效,是因为调用 drawrect
时有一个小的延迟,并且方法 drawrect
本身是轻量级的。
None 它不会减轻主线程的负载,而是小心地将负载放在主线程上,足以让动画继续运行,同时让主线程可以自由处理触摸事件
我想知道的:
1 - 这个实施 activity 指标的策略是否正确?或这样的陈述
self.timer =[NSTimer timerWithTimeInterval:0.1 target:self
selector:@selector(setNeedsDisplay) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
我在第三方的一个activity指标中看到有什么特别的效果吗?
2 - 如果我 运行 CABasicAnimation/transaction 并永远重复动画,与手动重复调用 setNeedsDispaly/drawrect 相比,它对主线程的负载有什么特殊影响吗?
我不确定它是否有助于实现您自己的 activity 指标,但系统 UIActivitiyIndicatorView
只是一个 UIImageView
,包含 12 个图像的数组,用于替换随着时间的推移彼此。
Apple 通过使他们的微调器离散来制作一个非常巧妙的技巧。它允许他们有一个简单的实现,不会在 CPU.
上产生任何计算负载UPD
返回你想知道的事情:
1 - 不是,因为在 drawRect
中实现手动画框完全由 CPU 完成。 2 - 我不能肯定地说,但如果有人相信 Apple 在文档和视频中关于 Core Animation
的说法,那么它已经过高度优化并在 Metal
上运行或至少 OpenGL
在下方,因此可以利用 GPU 的强大功能。