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