【发布时间】:2014-03-12 01:52:33
【问题描述】:
我有 UIScrollView 子类。它的内容是可重复使用的 - 大约 4 或 5 个视图用于显示数百个元素(同时滚动隐藏的对象重复使用并在需要查看它们时跳转到另一个位置)
我需要什么:能够自动将我的滚动视图滚动到任何位置。例如,我的滚动视图显示第 4、第 5 和第 6 个元素,当我点击某个按钮时,它需要滚动到第 30 个元素。换句话说,我需要 UIScrollView 的标准行为。
这很好用:
[self setContentOffset:CGPointMake(index*elementWidth, 0) animated:YES];
但我需要一些定制。例如,更改动画时长,添加一些代码以在动画结束时执行。
显而易见的决定:
[UIView animateWithDuration:3 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
[self setContentOffset:CGPointMake(index*elementWidth, 0)];
} completion:^(BOOL finished) {
//some code
}];
但我有一些与滚动事件相关联的动作,所以现在它们都在动画块中,它也会导致所有子视图的框架也进行动画处理(由于很少有可重用的元素,所有的动画都不是我想要的)
问题是:如何为内容偏移制作自定义动画(实际上我需要自定义持续时间、结束动作和 BeginFromCurrentState 选项)没有动画所有代码,连接到scrollViewDidScroll 事件?
统一更新:
感谢Andrew's answer(第一部分)我解决了scrollViewDidScroll中的动画问题:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
[UIView performWithoutAnimation:^{
[self refreshTiles];
}];
}
但scrollViewDidScroll 必须(出于我的目的)执行动画的每一帧,就像在
[self setContentOffset:CGPointMake(index*elementWidth, 0) animated:YES];
但是,现在它只在动画开始时执行一次。
我该如何解决这个问题?
【问题讨论】:
标签: ios cocoa-touch uiview uiscrollview uiviewanimation