黑马程序员技术交流社区
标题: 看IOS视屏有个小问题,关于动画小知识点的 [打印本页]
作者: SailY 时间: 2014-8-30 09:07
标题: 看IOS视屏有个小问题,关于动画小知识点的
执行动画时候用这个:// [UIView beginAnimations:nil context:nil];
// [UIView setAnimationDuration:1.0];
// [UIView commitAnimations];
现在换成这个:
X1
[UIView animateWithDuration:1.0 animations:^{
X
}completion:^(BOOL finished) {
Y
}];
这段代码的意思:1秒时间内,从X1状态变为X状态,然后执行Y。
那跟下面这段代码有什么区别?
X1
[UIView animateWithDuration:1.0 animations:^{
X
}
Y;
反正程序从上往下执行,总要执行Y,最上面的那个方法的设计不是多余的吗?
作者: cjfire 时间: 2014-8-30 09:33
视频里有讲吧,意思就是判断动画时候完成,完成后,再执行第二个block里面的东西。
作者: 王绍明 时间: 2014-8-30 10:03
你怎么看这么快
作者: SailY 时间: 2014-8-30 16:01
我辞职了,每天看,能不快吗,加油了伙计!
作者: SailY 时间: 2014-8-30 16:12
看看是不是这个意思:由于动画执行完需要1秒,而程序从上往下运行速度很快,不可能等1秒让程序停着,过1秒后再执行Y,真实过程应该是:程序运行到Y时假如只用了0.01秒,这个时候动画还没执行完,例如:X从0到320的渐变过程没完,X可能只是3,其实动画动了,只是肉眼看不到。如果有completion那个,Y语句会等到动画完成后再执行,也即是说,程序先跳过Y,先执行Y后面的程序,等动画完了,再回过头执行Y。可以搞两个动画来验证下。
作者: SailY 时间: 2014-8-30 16:28
联系人管理里的一个程序,实验了下,猜得是对的,代码:
[UIView animateWithDuration:1.0 animations:^{
CGRect tempF = last.frame;
tempF.origin.x = 320;
last.frame = tempF;
last.alpha = 0;
}completion:^(BOOL finished) {
[last removeFromSuperview];
NSLog(@"1111-----");
}];
NSLog(@"2222-----");
// [last removeFromSuperview];
先打印22222,等1秒钟后,动画执行完了,再打印11111,如果把注释的地方去掉,就看不到动画效果了,动画执行中就被删除了
作者: cjfire 时间: 2014-8-30 17:13
没错,是这个意思。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |