gpt4 book ai didi

ios - 从 UIButton super View 访问 Stack View

转载 作者:行者123 更新时间:2023-11-28 15:08:14 25 4
gpt4 key购买 nike

我试图通过它所属的堆栈 View 获取 UIButton 的 y 坐标位置。我在程序中需要这个值来将按钮的位置映射到不同的坐标系。

这是我的代码,将从堆栈 View 中获取按钮的 y 值:

p_tilePosition.x = round(self.layer.position.x / (self.frame.size.width + 8.0))// The 8 here is the standard spacing between sibling views
let testView = self.superview
if let yPosition = self.superview?.layer.position.y{
p_tilePosition.y = round(yPosition / (self.frame.size.height + 8.0))
}

(请注意,这是 UIButton 的子类。当 UIButton 被初始化时,它将运行这段代码以创建映射)

但是,我发现 self.superview 是 nil。我对此感到困惑,因为我认为按钮的 super View 是按钮所在的堆栈 View ?不是这样吗?我怎样才能通过在初始化时获取堆栈的 y 位置来获取按钮的 y 位置?

最佳答案

首先 - UIButton 初始化时没有任何 super View 。避免在初始化期间进行任何布局。事实上,如果它依赖于 superview 或任何其他不属于 UIView 的组件。最好在 View Controller 的 viewDidLoadviewWillLayoutSubviewsviewDidLayoutSubviews 中进行布局。

其次 - 如果您想将任何 View 的位置转换为其他 View 或主窗口的坐标,您可以使用 UIView.convert( to: ) 系列。例如

let postion = label1.convert(CGPoint.zero, to: nil)

将在主窗口中为您提供按钮的来源。

!!! 请注意,我请求的不是 label1.frame.origin 而是 CGPoint.zero,在标签的内部坐标中,标签的原点是 (0, 0)。

(老实说我应该转换 label1.bounds.origin,但它几乎总是 (0,0) )

您可以通过以下方式获得相同的结果:

let postion = label1.superview.convert(label1.frame.origin, to: nil)

关于ios - 从 UIButton super View 访问 Stack View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48118151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com