我有一个具有大量的内容一个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上直接操作。即使是容易执行滚动两种方式,我会建议开沟按钮的方法,只是用你现在正在实施直接操作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top