黑马程序员技术交流社区

标题: 今天再次看视频,解决了以前遇到的一个小问题 [打印本页]

作者: SailY    时间: 2014-9-19 11:56
标题: 今天再次看视频,解决了以前遇到的一个小问题
题目在进阶教程---联系人管理---remov方法里,就是点击垃圾桶删除一行的那个
   //2.删除最后一个子控
       [UIView animateWithDuration:1.0 animations:^{
//           CGRect tempF = last.frame;
//           tempF.origin.x = 320;
//           last.frame = tempF;

           last.frame = CGRectMake(320 , last.frame.origin.y, 320, kRowH);

           last.alpha = 0;
       }completion:^(BOOL finished) {

           // 上面的子控件只是移到最右边看不见而已,实际上还是有的,别忘记删了
           [last removeFromSuperview];

           //判断是否只剩一个子控件,设置删除item是否有效
           _removeItem.enabled = (self.view.subviews.count != 1);

       }];

说下两个问题吧:
1、注释的三行直接用了一行表示,这里只需要改X为320就行了,第一次写的时候把last.frame.origin.y写成了一个固定的值,所以删得时候往右跑的时候还一边往下

2、最后面 _removeItem.enabled = (self.view.subviews.count != 1);这一段放在外面就不行吗?
肯定不行,最开始看视频的时候理解错了
UIView animateWithDuration:1.0 animations:^{

          X;
   }completion:^(BOOL finished) {

          Y;
   }

          Z;
可能程序执行完X的时候只用了0.001秒,接着执行Z,又用了0.001秒,再过0.998秒后执行Y。

Z先于Y执行了,与程序员初衷相违背,所以要把Z放到Y。往往程序跑完了,还要过会再执行completion里的代码

也就是说,如果放到最后面的话:
最后一个子控件跑到最右边看不到的地方去了,然后判断删除item是否有效(肯定是有效的,因为还没删),然后再来删除,明显错了

今天又看到了这里,提一下把


作者: ★彬★卍囧神    时间: 2014-9-19 15:35
还没看到那...
作者: 努力微笑    时间: 2014-9-19 17:37
你拿到入学名额了?拿到名额再看进阶也不完 基础多看看
作者: SailY    时间: 2014-9-19 23:13
努力微笑 发表于 2014-9-19 17:37
你拿到入学名额了?拿到名额再看进阶也不完 基础多看看

就差最后面试了,你面试多少分?




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