我想在内置动画完成后执行一些代码。
我有一个带有很多单元格/行的UITableView。有时候,当我做一些操作然后我需要滚动到tableView的顶部。为此,我使用:
tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: UITableViewScrollPosition.Top, animated: true)
但是我需要在达到顶部后执行一些代码,这样一个简单的选择和取消选择第一行。
我从func scrollViewDidEndScrollingAnimation(scrollView: UIScrollView)
实施了UIScrollViewDelegate
。它工作正常(或多或少,有时动画并不是非常流畅,我们不会看到选择/取消选择"动画")除非我已经在表格的顶部,然后scrollViewDidEndScrollingAnimation
没有被召唤。
有没有办法在调用scrollToRowAtIndexPath:atScrollPosition:animated
后执行一些代码?
修改
当我谈论进行某些操作时,我正在谈论使用moveRowAtIndexPath:toIndexPath
中的UITableView
移动行。
因此,当需要滚动它很好时,两个动画需要大约相同的时间。但是当不需要滚动时,那么我想在动画之后执行的代码的执行与动画同时启动
答案 0 :(得分:2)
您可以使用我从an old Objective-C answer改编的Swift代码来滚动视图。
// First, test whether the tableView needs to scroll to the new position
var originalOffset = tableView.contentOffset.y;
tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: UITableViewScrollPosition.Top, animated: false)
var offset = tableView.contentOffset.y;
if (originalOffset == offset) {
// No animation is needed since its already there
doThingAfterAnimation();
} else {
// We know it will scroll to a new position
// Return to originalOffset. animated:NO is important
tableView.setContentOffset(CGPointMake(0, originalOffset), animated: false);
// Do the scroll with animation so `scrollViewDidEndScrollingAnimation:` will execute
tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: UITableViewScrollPosition.Top, animated: true)
}
然后当然:
func scrollViewDidEndScrollingAnimation(scrollView: UIScrollView) {
doThingAfterAnimation();
}