有什么办法可以从其他视图滚动UITextView吗?

时间:2014-08-27 17:19:21

标签: ios uiview uiscrollview uitextview uigesturerecognizer

我有一个UITextView和一个带有UIPanGestureRecognizer的简单空白视图。这背后的想法如下:我在空白视图中做出平移手势,手势识别器检测到它并滚动文本视图(通过scrollToVisibleRect或像这样)。还有其他方法吗?我问,因为this尚未解决。

2 个答案:

答案 0 :(得分:0)

您可以像设置其他任何scrollView一样设置textView的内容偏移量。尝试这样的事情:

- (void)handlePan:(UIPanGestureRecognizer *)pan
{
    if (pan.state == UIGestureRecognizerStateChanged) {
        CGPoint offset = self.textView.contentOffset;
        offset.y += [pan translationInView:pan.view].y;
        self.textView.contentOffset = offset;
    }
    [pan setTranslation:CGPointZero inView:pan.view];
}

我还没有对此进行过测试,因此可能存在一些小问题。这应该至少让你指向正确的方向。如果您有更新/问题,请告诉我。

答案 1 :(得分:0)

基本上,洛根的回答是正确的。虽然,我想补充一点: 您需要减去(不添加)翻译的y分量。所以代码应该是这样的:

currentOffset.y -= [pan translationInView:pan.view].y;

然后你必须阻止contentOffset超过textView' contentSize.height。只需添加:

CGFloat minOffset = 0.0;
CGFloat maxOffset = self.myTextView.contentSize.height - self.myTextView.bounds.size.height;

self.myTextView.contentOffset = CGPointMake(0,fmax(minOffset, fmin(currentOffset.y, maxOffset))); 

是的,这条线非常重要

`[gestureRecognizer setTranslation:CGPointZero inView:gestureRecognizer.view];`

为什么呢? Apple在:

中说

- (CGPoint)translationInView:(UIView *)view

x和y值报告一段时间内的总翻译。 从上次报告翻译时起,它们不是delta值应用 翻译值到视图的状态 手势首次时识别 - 不要连接值每次调用处理程序时。

有关详细信息,请最好阅读this