动画仍然在,主线程做其他事情

时间:2014-10-29 05:19:48

标签: ios multithreading animation

这是我的代码。很简单。我的问题是为什么动画仍然在主线程做其他事情时,文档说主线程可以更新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);
}

1 个答案:

答案 0 :(得分:2)

动画在图形硬件中运行,甚至不会打扰CPU。

核心动画位于UIKit下,因此当您使用animateWithDuration:animations:completion: UIView时,您实际上正在使用核心动画。

我引用CoreAnimation_guide中的一个段落:

  

核心动画是一种图形渲染和动画基础设施   可用于iOS和OS X,用于为视图和动画设置动画   您应用的其他视觉元素。有了Core Animation,大部分都是   绘制动画的每一帧所需的工作都是为您完成的。所有   你要做的是配置一些动画参数(比如   开始和结束点)并告诉Core Animation开始。核心动画   做其余的事情,将大部分实际绘图工作交给了   板载图形硬件以加速渲染。这个自动   图形加速导致高帧率和平滑   动画,不会给CPU带来负担,也会减慢你的应用。

我认为很清楚回答你的问题。