将坐标点转换为视点的问题

时间:2016-12-15 05:19:00

标签: ios uiview swift3 uikit

基本上我一直在使用坐标点,我也更喜欢使用它,因为左下角是原点。我找到了我想要使用的以下代码。它在屏幕顶部创建一个矩形。

private let minimalHeight: CGFloat = 50.0
private let shapeLayer = CAShapeLayer()
// MARK: -
override func loadView() {
  super.loadView()

  shapeLayer.frame = CGRect(x: 0.0, y: 0.0, width: view.bounds.width, height: minimalHeight)
  shapeLayer.backgroundColor = UIColor(red: 57/255.0, green: 67/255.0, blue: 89/255.0, alpha: 1.0)
  view.layer.addSublayer(shapeLayer)

  view.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: "panGestureDidMove:"))
}

// MARK: -
// MARK: Methods

func panGestureDidMove(gesture: UIPanGestureRecognizer) {
  if gesture.state == .Ended || gesture.state == .Failed || gesture.state == .Cancelled {

  } else {
    shapeLayer.frame.size.height = minimalHeight + max(gesture.translationInView(view).y, 0)
  }
}

override func preferredStatusBarStyle() -> UIStatusBarStyle {
  return .LightContent
}

我希望屏幕底部有一个矩形,所以我可以向上平移,所以我将shapeLayer.frame更改为

shapeLayer.frame = view.convert(CGRect(x: 0.0, y: 0.0, width: UIScreen.main.bounds.width, height: minimalHeight), from: (view.window?.screen.coordinateSpace)!)

但是当我运行代码时,此行会出现EXC_BREAKPOINT错误。如何转换上面shapeLayer.frame的坐标点中指定的矩形?

更新

以下是我所获得的截图,shapeLayer.frame位于屏幕顶部,但我希望它位于底部,以便我可以向上平移。

enter image description here

1 个答案:

答案 0 :(得分:0)

(view.window?.screen.coordinateSpace)!导致了这个问题。

(view.window?.screen.coordinateSpace)!更改为UIApplication.shared.delegate!.window!!.screen.coordinateSpa‌​ce