【问题标题】:Lock UIView position relatively to UIScrollView相对于 UIScrollView 锁定 UIView 位置
【发布时间】: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 类?

【问题讨论】:

    标签: ios 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 }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多