如果视图位于UIStackView内,则中心点错误

时间:2018-03-10 19:40:08

标签: ios swift uistackview

我只是试图获得UIButton的中心点,如果我点击它来画上它的东西。但问题是中心点是错误的。我的按钮位于UIStackView内。

我在按钮操作中尝试做什么:

let myButtonCenter = contentView.convert(sender.center, from: stackView)

但它给了我错误的CGPoint()

这是我的视图堆栈:

enter image description here

我也尝试过这样:

func getTappedButtonCenter(sender: UIButton) -> CGPoint{
        var buttonsArray = [UIButton]()
        for view in stackView.arrangedSubviews {
            let horizontalStackView = view as! UIStackView
            for view in horizontalStackView.arrangedSubviews {
                let button = view as! UIButton

                buttonsArray.append(button)

            }
        }

        let buttonIndex = buttonsArray.index(of: sender)

        let tappedButton = buttonsArray[buttonIndex!] as! UIButton

        return convert(tappedButton.center, from: tappedButton)

    }

所以我的问题是,如果它位于UIStackView内,我应该如何获得视图中心?

2 个答案:

答案 0 :(得分:0)

您需要将UIButton框架转换为superview。结帐Apple docs

答案 1 :(得分:0)

“它给我错误的CGPoint()”是什么意思?视图的中心以超视图的坐标系表示。在这种情况下,按钮的超级视图将是堆栈视图。如果您想在视图控制器的内容视图中使用坐标系中的中心,则需要使用let temp = sender.center let myButtonCenter = self.view.convert(temp, from: sender) 转换方法之一,例如:

view

(请注意,上面的代码中不需要“self”,并添加它以清楚地表明select ST_Transform(ST_Expand(ST_Transform(geo::geometry, _ST_BestSRID(geo)), 1, 1), 4326) from ST_Centroid(ST_SetSRID(ST_MakePoint(?, ?), 4326)) as geo 是视图控制器的内容视图。)