【问题标题】: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。