iPhone自动滚动的UITextView但允许手动滚动也
-
23-08-2019 - |
题
我有一个具有大量的内容一个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];
}
的关键是在OFF转动动画和移动以较小的增量偏移。它似乎运行得更快,它不会与手动滚动干扰。
- (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上直接操作。即使是容易执行滚动两种方式,我会建议开沟按钮的方法,只是用你现在正在实施直接操作。