如何在 UIScrollView 中获取 UIImageView 的位置并只允许平移它?

Posted

技术标签:

【中文标题】如何在 UIScrollView 中获取 UIImageView 的位置并只允许平移它?【英文标题】:How do I get the position of the UIImageView in my UIScrollView and only allow it to be panned? 【发布时间】:2013-12-30 22:04:29 【问题描述】:

在我看来,当我在 UIScrollView 中嵌入 UIImageView 时,很难获得有关 UIImageView 的信息并能够对其进行操作。

我有一个全屏UIScrollView,可以将UIImageView 放大到全屏。

但是,如果我希望能够在屏幕的滚动视图中“抛出”UIImageView(类似于 Tweetbot 或 Facebook),我无法将 UIPanGestureRecognizer 添加到图像视图中,我有将其添加到滚动视图。

令人讨厌的是,这意味着用户可以从全屏滚动视图中的任何位置开始平移,而不仅仅是在图像上。 是否可以使只能平移图像,而不是完整的滚动视图?

与此密切相关的事实是,我似乎无法在滚动视图中获取图像的框架。如果我在平移时询问滚动视图的框架,我显然会得到完整的滚动视图,而不仅仅是其中的图像,它不能准确地显示图像的位置。另一方面,如果我尝试获取图像的框架,它永远不会改变,因为它相对于滚动视图移动。 如何获取图片当前所在的位置?

【问题讨论】:

【参考方案1】:

是否有可能只平移图像,而不是完整的滚动视图?

在您的手势识别器的委托中实现- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch,然后测试UITouch 的位置与您的图像视图的位置。

所以,大概是这样的:

CGPoint touchLocation = [touch locationInView:scrollView];
return CGRectContainsPoint(imageView.frame, touchLocation);

如何获取图片当前所在的位置?

根据哪个坐标空间?假设您的意思是相对于视图控制器的***视图,请使用 [viewController.view convertRect:imageView.frame fromView:scrollView]

滚动视图通过更改 bounds 来滚动其内容。它们不会更改包含的视图上的任何内容。 UIView -convertRect:fromView 和其他人整合了从一个视图的内部坐标空间映射到另一个视图的所有逻辑,调整转换和内部滚动以及所有内容。

【讨论】:

以上是关于如何在 UIScrollView 中获取 UIImageView 的位置并只允许平移它?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UiScrollview 中获取子视图的内容

如何获取 UIScrollView 中滚动的 contentOffset?

如何在 UIScrollView 中获取 UIImageView 的位置并只允许平移它?

如何获取有关 UIScrollView 中页面的信息?

带有图像的 UIPagecontrol

如何从 UIScrollView 获取 UIButton 位置