将UIView中心坐标从局部坐标转换为窗口基础坐标?

时间:2018-10-23 17:04:06

标签: ios swift

我正在尝试使用以下代码获取窗口基本坐标系中所有UITabBar子视图的中心点。

func getHighlightLocations() -> [CGPoint] {
    var cgpointArray = [CGPoint]()

    self.tabBar.subviews.foreach {
            let point =  $0.convert($0.center, to: nil)
            cgpointArray.append(point)
    }
    return cgpointArray
}

我遇到的问题是返回的坐标落在设备屏幕之外

po cgpointArray
▿ <Array<CGPoint>>
  ▿ some : 6 elements
    ▿ 0 : (252.0, 123.3)
      - x : 252.0
      - y : 123.3
    ▿ 1 : (207.0, 844.0)
      - x : 207.0
      - y : 844.0
    ▿ 2 : (54.0, 828.5)
      - x : 54.0
      - y : 828.5
    ▿ 3 : (261.5, 828.5)
      - x : 261.5
      - y : 828.5
    ▿ 4 : (675.5, 828.5)
      - x : 675.5
      - y : 828.5
    ▿ 5 : (468.0, 828.5)
      - x : 468.0
      - y : 828.5

我该怎么办??,为什么不返回点位于窗口设备屏幕内。

1 个答案:

答案 0 :(得分:3)

我相信您想从标签栏视图转换 ... ...因此,请尝试如下操作:

class MyTabBarController: UITabBarController {

    func getHighlightLocations() -> [CGPoint] {
        var cgpointArray = [CGPoint]()

        tabBar.subviews.forEach {
            let point = tabBar.convert($0.center, to: nil)
            cgpointArray.append(point)
        }

        return cgpointArray
    }

}

对于3项标签栏,我得到了这个结果(第一点是来自标签栏的背景视图):

[(187.5, 642.5), (62.5, 643.0), (187.5, 643.0), (312.5, 643.0)]