A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



执行动画时候用这个:
//    [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,最上面的那个方法的设计不是多余的吗?




6 个回复

倒序浏览
视频里有讲吧,意思就是判断动画时候完成,完成后,再执行第二个block里面的东西。
回复 使用道具 举报
你怎么看这么快
回复 使用道具 举报

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

看看是不是这个意思:由于动画执行完需要1秒,而程序从上往下运行速度很快,不可能等1秒让程序停着,过1秒后再执行Y,真实过程应该是:程序运行到Y时假如只用了0.01秒,这个时候动画还没执行完,例如:X从0到320的渐变过程没完,X可能只是3,其实动画动了,只是肉眼看不到。如果有completion那个,Y语句会等到动画完成后再执行,也即是说,程序先跳过Y,先执行Y后面的程序,等动画完了,再回过头执行Y。可以搞两个动画来验证下。
回复 使用道具 举报
联系人管理里的一个程序,实验了下,猜得是对的,代码:
[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:25
7#
SailY 发表于 2014-8-30 16:12
看看是不是这个意思:由于动画执行完需要1秒,而程序从上往下运行速度很快,不可能等1秒让程序停着,过1 ...

没错,是这个意思。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马