【问题标题】:Is there any way I can scroll UITextView from other view?有什么办法可以从其他视图滚动 UITextView 吗?
【发布时间】:2014-10-21 09:38:45
【问题描述】:

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

【问题讨论】:

    标签: ios uiview uiscrollview uitextview uigesturerecognizer


    【解决方案1】:

    您可以设置 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];
    }
    

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

    【讨论】:

      【解决方案2】:

      基本上,Logan 的回答是正确的。虽然,我想补充一点: 您需要减去(而不是添加)翻译的 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];`
      

      为什么?苹果在 :

      - (CGPoint)translationInView:(UIView *)view

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

      更多信息,您最好阅读this

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-06
        • 2013-09-04
        • 2013-01-04
        • 1970-01-01
        • 2014-07-01
        相关资源
        最近更新 更多