【问题标题】:convert(_ rect: CGRect, to view: UIView?) does nothing when I pass nil to the view parameter当我将 nil 传递给 view 参数时,convert(_ rect: CGRect, to view: UIView?) 什么都不做
【发布时间】:2018-02-23 13:19:37
【问题描述】:

我正在尝试在超级视图的本地坐标中获取视图的坐标。因此,根据文档,如果 view 为 nil,则此方法将改为转换为窗口基坐标。所以就我而言,它什么也没做,但如果我将视图传递给它,它就可以工作。

let zoomImageView = UIImageView()
let xoomImageView2 = UIImageView()
let xoomImageView3 = UIImageView()
let stratingFrame2 = CGRect(x: 20, y: 10, width: 150, height: 130)
let startingFrame1 = CGRect(x: 40, y: 20, width: 200, height: 160)
let startingFrame = CGRect(x: 0, y: 200, width:375, height: 200)

override func viewDidLoad() {
    super.viewDidLoad()
    xoomImageView3.frame = stratingFrame2
    xoomImageView3.backgroundColor = UIColor.purple
    xoomImageView2.frame = startingFrame1
    xoomImageView2.backgroundColor = UIColor.black
    zoomImageView.frame = startingFrame
    zoomImageView.backgroundColor = UIColor.red
    zoomImageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(animate)))
    zoomImageView.isUserInteractionEnabled = true
 //   zoomImageView.image = UIImage(named: "zuckdog")
    zoomImageView.contentMode = .scaleAspectFill
    zoomImageView.clipsToBounds = true
    view.addSubview(zoomImageView)
    zoomImageView.addSubview(xoomImageView2)
    xoomImageView2.addSubview(xoomImageView3)
    print(zoomImageView.frame)
    print(xoomImageView2.frame)
    print(xoomImageView3.frame)

    let newFrame = zoomImageView.convert(xoomImageView3.frame, to:  nil)
    print(newFrame)

也许有人能说出发生了什么?

【问题讨论】:

    标签: ios swift coordinate-systems


    【解决方案1】:

    如果你想在坐标中转换一个主要规则是

    视图必须是子视图到用户坐标的转换方法

    现在看看你的代码

    let newFrame = zoomImageView.convert(xoomImageView3.frame, to:  nil)
    print(newFrame)
    

    zoomImageView 在您的代码中从来不是子视图 xoomImageView3,还有一件事 xoomImageView3zoomImageView 对象没有直接关系

    你需要做的是

    首先将xoomImageView3 帧转换为zoomImageView

     let xoomImageView3FrameAccordingTo_zoomImageView  = xoomImageView2.convert(xoomImageView3.frame, to:  zoomImageView)
    

    现在

    let newFrame = zoomImageView.convert(xoomImageView3FrameAccordingTo_zoomImageView, to:  self.view)
    

    【讨论】:

    • 请再看我的代码,再看文档,不要写得乱七八糟。其次,我发现当我在 ViewDidLoad 中使用函数时,它只会以一种奇怪的方式工作,如果我在 viewDidAppear 中使用它,它就可以正常工作。所以也许有某种隐藏真正的原因。
    • @N.Khasanov 真的。然后请尝试这个混乱
    • @N.Khasanov 您是否在问题中添加了该内容。它在 ViewDidAppear 中工作吗?很抱歉,您的变量命名约定非常糟糕
    • 你走错方向了。感谢您的努力。
    • 是的,它可以工作,但谢谢你,我不需要你的帮助。我无法帮助我。十分感谢。祝你有美好的一天。
    猜你喜欢
    • 1970-01-01
    • 2011-03-23
    • 2022-08-16
    • 2016-04-01
    • 2013-07-31
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2019-06-15
    相关资源
    最近更新 更多