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