当我在UITableView中选择一行时,我在行的帧的GCRect上调用scrollRectToVisible:animated
,然后立即执行其他动画。我的问题是我不知道scrollRectToVisible:animated
的动画何时完成。
我的代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRwoAtIndexPath:indexPath];
[self.tableView scrollRectToVisible:cell.frame animated:YES];
//more animations here, which I'd like to start only after the previous line is finished!
}
答案 0 :(得分:16)
我遇到了这个UIScrollViewDelegate
方法:
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
// Do your stuff.
}
仅调用动画卷轴。不要求基于触摸的滚动。似乎工作得很好。
答案 1 :(得分:7)
更简单的方法是将滚动代码封装在UIView animateWith [...]块中,如下所示:
[UIView animateWithDuration:0.3f animations:^{
[self.tableView scrollRectToVisible:cell.frame animated:NO];
} completion:^(BOOL finished) {
// Some completion code
}];
请注意,scrollRectToVisible:animated:方法中的动画== NO。
答案 2 :(得分:4)
协议UITableViewDelegate
符合UIScrollViewDelegate
。您可以在手动滚动时设置BOOL
参数,然后在scrollViewDidScroll:
BOOL manualScroll;
...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRwoAtIndexPath:indexPath];
manualScroll = YES;
[self.tableView scrollRectToVisible:cell.frame animated:YES];
}
...
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (manualScroll)
{
manualScroll = NO;
//Do your staff
}
}
不要忘记设置UITableViewDelegate
。