这是我的代码。很简单。我的问题是为什么动画仍然在主线程做其他事情时,文档说主线程可以更新ui。主线程可以同时做两件事???
可能是GPU制作动画吗?- (void)viewDidLoad {
[super viewDidLoad];
UILabel *testLabel = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 80, 50)];
testLabel.font = [UIFont systemFontOfSize:15.0f];
testLabel.backgroundColor = [UIColor redColor];
testLabel.text = @"Hello world";
testLabel.adjustsFontSizeToFitWidth = YES;
[self.view addSubview:testLabel];
[UIView animateWithDuration:10
animations:^{
testLabel.frame = CGRectMake(100, 200, 80, 50);
} completion:^(BOOL finished) {
//
}];
[self performSelector:@selector(hello:) withObject:@"hello" afterDelay:2];
}
- (void)hello:(NSString *)hello{
for (int i = 0; i < 100000; i++) {
NSInteger j = i *5;
NSLog(@"%d",j);
}
NSLog(@"%@",hello);
}
答案 0 :(得分:2)
动画在图形硬件中运行,甚至不会打扰CPU。
核心动画位于UIKit
下,因此当您使用animateWithDuration:animations:completion:
UIView
时,您实际上正在使用核心动画。
我引用CoreAnimation_guide中的一个段落:
核心动画是一种图形渲染和动画基础设施 可用于iOS和OS X,用于为视图和动画设置动画 您应用的其他视觉元素。有了Core Animation,大部分都是 绘制动画的每一帧所需的工作都是为您完成的。所有 你要做的是配置一些动画参数(比如 开始和结束点)并告诉Core Animation开始。核心动画 做其余的事情,将大部分实际绘图工作交给了 板载图形硬件以加速渲染。这个自动 图形加速导致高帧率和平滑 动画,不会给CPU带来负担,也会减慢你的应用。
我认为很清楚回答你的问题。