黑马程序员技术交流社区

标题: 看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
王绍明 发表于 2014-8-30 10:03
你怎么看这么快

我辞职了,每天看,能不快吗,加油了伙计!
作者: SailY    时间: 2014-8-30 16:12
cjfire 发表于 2014-8-30 09:33
视频里有讲吧,意思就是判断动画时候完成,完成后,再执行第二个block里面的东西。 ...

看看是不是这个意思:由于动画执行完需要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
SailY 发表于 2014-8-30 16:12
看看是不是这个意思:由于动画执行完需要1秒,而程序从上往下运行速度很快,不可能等1秒让程序停着,过1 ...

没错,是这个意思。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2