相对于 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 removeFromSuperview] 崩溃了?