iOS和Swift-获取对象的屏幕位置以设置另一个对象的位置

时间:2019-07-17 22:16:01

标签: ios swift

我有一个iOS应用程序,该应用程序将图像放置在相对于特定输入滑块放置位置的垂直位置,该位置可能会因手机和顶部的安全区域而异。除了在iPhone X上,该代码还可以正常工作。

这是我获取滑块的垂直位置,然后根据我的“ rate”变量计算图像的y位置的方法。

var zeroVert = Int(slider8.center.y)
var vertical: Int = zeroVert - 6 - Int(rate*20) 

如何以编程方式针对安全区域进行调整?

[更新]我刚刚尝试获取安全区域插图(使用iPhone Xs max模拟器),但是它返回零。

if #available(iOS 11.0, *) {
   insetTop = Int(view.safeAreaInsets.top)
}

[更新2]现在我想到了,只要正确知道滑块的位置,我就不必在意安全区域边距。图像仅与此相对。所以我的问题是我似乎无法获取滑块的正确位置。

1 个答案:

答案 0 :(得分:0)

我找到了部分解决方案。它基于bsod的回答: Get safe area inset top and bottom heights

在布局好子视图之前,获取屏幕对象的位置并不重要。

    var zeroVert: Int = 0

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        zeroVert = Int(slider8.center.y)  // My slider
        placeArrows()  // The function that places the image based on the slider position
    }

这似乎正在工作。我的placeArrows()函数在其他地方调用,我认为现在可能是多余的,因为在布置子视图时会重复调用它。但这是一个简短的功能,很快就会过去。除非您能帮助我找出更好的方法,否则目前为止已经足够好了。

如果我在拥有滑块的有效位置后未运行placeArrows()函数,它将使用初始化值zeroVert(已将其设置为零)以防止其出现在屏幕上。