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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

题目在进阶教程---联系人管理---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是否有效(肯定是有效的,因为还没删),然后再来删除,明显错了

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

3 个回复

正序浏览
努力微笑 发表于 2014-9-19 17:37
你拿到入学名额了?拿到名额再看进阶也不完 基础多看看

就差最后面试了,你面试多少分?
回复 使用道具 举报
你拿到入学名额了?拿到名额再看进阶也不完 基础多看看
回复 使用道具 举报
还没看到那...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马