2010-05-10 60 views

回答

1

这不是你想听到的答案,但没有* :(

表视图的代表将只能these methods回应。

但是,(这是一个黑客攻击的一位,但)动画是约0.35秒长,你可以只调用performSelector:withObject:afterdelay:

*至少不像据我所知。

+0

这是可靠的/一致的吗?如果运行循环延迟会发生什么? – akaii 2010-05-11 10:59:04

+0

它一点都不一致 - 这有点破解!如果运行循环延迟,您将在动画完成和您想要发生的任何动作之间暂停。 – deanWombourne 2010-05-11 11:25:59

4

其实,有DOES似乎是一个办法d这(虽然不像它应该那样直截了当!)。

虽然没有直接访问某种回调,但看起来UITableView动画发生在CAAnimation内。因此,只需访问CAAnimationcompletionBlock似乎可以给你想要的东西。

这里就是我得到了2个动画链在我UITableView子类:

#pragma mark - Section expanding/collapsing 
- (void)toggleSection:(NSInteger)index { 
    int expandedSection = [self ExpandedSection]; 
    if (expandedSection != NO_EXPANDED_SECTIONS_INDEX) { 
     [self beginUpdates]; 
     [self collapseSection:@(expandedSection)]; 
     [CATransaction setCompletionBlock:^{ 
      if (expandedSection != index) { 
       [self beginUpdates]; 
       [self expandSection:@(index)]; 
       [self endUpdates]; 
      } 
     }]; 
     [self endUpdates]; 
    } else { 
     [self expandSection:@(index)]; 
    } 
} 

的代码在collapseSection:expandingSection:方法简单地增加/删除子节需要进行折叠或展开。这里的关键点在于,使用此代码时,我终于可以折叠一个子部分然后展开下一个子部分。之前,两个动画都同时发生,这在视觉上没有吸引力。

我希望这可以帮助你!我经过很长一段时间的努力挣扎着,把我的头撞到墙上,直到我发现它。

这是针对iOS 6.0编写的。我也非常希望未来的一些版本能够解决这个问题!

+0

这似乎是一个非常可行的解决方案。谢谢 – LightningStryk 2013-07-19 22:26:33