我有一个有很多内容的UITextView。 我有一个按钮,允许UITextView的自动滚动在一个NSTimer环+ 10个像素:
scrollPoint = CGPointMake(scrollPoint.x, scrollPoint.y + 10);
[textView setContentOffset:scrollPoint animated:YES];
这个作品真的很好,作为动画使得滚动还算顺利。 我想允许用户通过用手指滚动跳向前或向后,但由于滚动动画此代码后,滚动弹回那里将自动滚动。
我需要手动滚动后的scrollPoint变量复位,但我不知道该怎么做。 我试图实现委托方法
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView;
但在我自动滚动这种方法火灾为好。
有任何想法吗?
你可以只让它动相对于它在哪里:
scrollPoint = textView.contentOffset;
scrollPoint.y= scrollPoint.y+10;
[textView setContentOffset:scrollPoint animated:YES];
我想要做你正在尝试做奔同样的事情,但我发现动画是在显示时间而言成本太高,而且似乎击败目的。 我打得四处看,发现下面的代码做你想要它做什么,不会拖垮系统在所有。
建立
if (autoscrollTimer == nil) {
autoscrollTimer = [NSTimer scheduledTimerWithTimeInterval:(35.0/1000.0)
target:self
selector:@selector(autoscrollTimerFired:)
userInfo:nil
repeats:YES];
}
关键是在打开关闭动画和移动以较小的增量所抵消。 它似乎运行得更快,它不会与手动滚动干扰。
- (void)autoscrollTimerFired:(NSTimer*)timer {
CGPoint scrollPoint = self.textView.contentOffset;
scrollPoint = CGPointMake(scrollPoint.x, scrollPoint.y + 1);
[self.textView setContentOffset:scrollPoint animated:NO];
}
我非常新的Objective-C和iPhone开发,所以如果任何人有更多的经验,看到了问题,这种方法我将不胜感激任何反馈。
我认为具有有效2种方式来滚动你的那种战斗的API的内容。
如果我理解正确的话,在当前的设置,您有一个按钮,触发一个动画。
当你以这种方式滚动,创建一个动画并在另一个线程上运行。 虽然在动画运行,表示层正在改变。 然而,实际的内容偏移未设置直到动画完成。
这工作正常,透明的, 直到你试图在已经被它的动画以动画相同的属性。
通常情况下,在这种情况下,你取消现有的动画,设置帧表现层(当前屏幕上的位置),然后应用新的动画。
但是,你正在使用的TextView(setContentOffset的便捷方法:动画:)。 当你这样做,你放弃了精细的动画控制,以换取较少的代码行。
我认为,在进步停止滚动可以使用更高级别的API是很难或不可能的。 这意味着你想你至少要尝试一个UIView动画块,最有可能真正创造一个CAAnimation什么。
在简单的解决方案是解决上滚动你的TextView的一种手段。 在HIG有利于使用在iPhone上直接操作。 即使是容易执行滚动两种方式,我会建议开沟按钮的方法,只是用你现在正在实施直接操作。