Ios 当主线程被阻塞时,UIKit如何绘制动画UIActivityIndicator?
考虑下面的代码。运行此操作时,活动指示器会出现并设置动画,同时“测试”会重复记录到控制台。为什么? 我希望活动指示器出现在屏幕上,但无法设置动画,因为“测试”块在下一次重画活动指示器之前在主队列上执行,并且该块永远不会完成执行 UIKit是否将活动指示器从主线程上拔下Ios 当主线程被阻塞时,UIKit如何绘制动画UIActivityIndicator?,ios,multithreading,uikit,drawing,objective-c-blocks,Ios,Multithreading,Uikit,Drawing,Objective C Blocks,考虑下面的代码。运行此操作时,活动指示器会出现并设置动画,同时“测试”会重复记录到控制台。为什么? 我希望活动指示器出现在屏幕上,但无法设置动画,因为“测试”块在下一次重画活动指示器之前在主队列上执行,并且该块永远不会完成执行 UIKit是否将活动指示器从主线程上拔下 - (void)viewDidLoad { [super viewDidLoad]; UIActivityIndicatorView *v = [[UIActivityIndicatorView alloc] initWi
- (void)viewDidLoad {
[super viewDidLoad];
UIActivityIndicatorView *v = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[self.view addSubview:v];
v.center = self.view.center;
[v startAnimating];
dispatch_async(dispatch_get_main_queue(), ^{
while (1) {
NSLog(@"test");
}
});
}
核心动画编程指南 声明: 因为它操作静态位图,基于图层的图形 与更传统的基于视图的图形有显著不同 技术。使用基于视图的图形时,经常会更改视图本身 导致调用视图的drawRect:方法来重画内容 使用新参数。但是这样画画很昂贵,因为 这是使用主线程上的CPU完成的。核心动画避免 只要有可能,通过在中操作缓存的位图,就可以节省开支 硬件实现相同或相似的效果
并非所有的绘图都会在主线程上进行。当然,任何动画都只是由苹果在另一个线程上作为计时器来实现的,它只是连续(比如说,20hz或其他)告诉用户界面改变帧。