【问题标题】:iOS and Swift - Getting the screen position of an object to set the location of another objectiOS 和 Swift - 获取一个对象的屏幕位置以设置另一个对象的位置
【发布时间】:2019-07-17 22:16:01
【问题描述】:

我有一个 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)
}

[update 2] 现在想想,只要正确知道滑块的位置,我就不应该关心安全区域边距。图像只是从那个偏移。所以我的问题是我似乎无法获取滑块的正确位置。

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    我找到了部分解决方案。它基于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 的初始化值,我已将其设置为零以防止它出现在屏幕上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      相关资源
      最近更新 更多