相对于 UIScrollView 锁定 UIView 位置

Posted

技术标签:

【中文标题】相对于 UIScrollView 锁定 UIView 位置【英文标题】:Lock UIView position relatively to UIScrollView 【发布时间】:2015-12-15 16:02:48 【问题描述】:

我正在尝试创建一个界面,该界面显示带有固定位置标记的平面图,因此当用户缩放或滚动平面图时,标记相对于平面图图像保持在相同位置。

到目前为止,我尝试使用包含 UIImageView 的 UIScrollView 来实现,然后尝试添加一些虚拟子视图

let view = UIView(frame: CGRect(origin: CGPoint(x: 400, y: 200), size: CGSize(width: 36, height: 36)))
view.backgroundColor = UIColor.redColor()
scrollView.addSubview(view)

但原点(在我的示例中为 400,200)是相对于屏幕而言的,这意味着虚拟子视图仅在您缩放足够多时显示,然后在您滚动时滑动。

我不知道如何解决这个问题。也许我应该使用其他一些 UIKit 类?

【问题讨论】:

【参考方案1】:

试试看

创建首选大小的容器视图 将图像视图添加为此容器视图的子视图 在容器视图中添加虚拟子视图 从学校视图的缩放委托方法返回容器视图

事实上他们需要一个共同的祖先视图

【讨论】:

谢谢,这太明显了。除了每次用户放大或缩小时计算它们的大小和位置之外,您是否知道是否有任何方法可以使这些“虚拟”视图无论缩放级别如何都显示相同的大小? 我认为在缩放的委托方法中,您可以应用与应用于内容视图的变换相等但带有负号的变换 实际上我必须将原始大小除以缩放比例以保持绝对大小相等。再次感谢您为我指明正确的方向。为了将来参考,这段代码可以做到:func scrollViewDidZoom(scrollView: UIScrollView) var frame: CGRect! = innerView.frame let center = innerView.center frame.size = CGSize(width: basicMarkerSize/scrollView.zoomScale, height: basicMarkerSize/scrollView.zoomScale) innerView.frame = frame innerView.center = center

以上是关于相对于 UIScrollView 锁定 UIView 位置的主要内容,如果未能解决你的问题,请参考以下文章

UIPageViewController 中的 UIScrollView 滚动了多少?

如何为 UIScrollView 启用方向锁定?

UIScrollView 子视图中滚动事件的锁定处理(在 UIScrollView 超级视图内)

为啥我的 [UIScrollView removeFromSuperview] 崩溃了?

UIScrollView 嵌入其他 UIScrollView

UIScrollView 弹回顶部