基本上我一直在使用坐标点,我也更喜欢使用它,因为左下角是原点。我找到了我想要使用的以下代码。它在屏幕顶部创建一个矩形。
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
位于屏幕顶部,但我希望它位于底部,以便我可以向上平移。
答案 0 :(得分:0)
(view.window?.screen.coordinateSpace)!
导致了这个问题。
将(view.window?.screen.coordinateSpace)!
更改为UIApplication.shared.delegate!.window!!.screen.coordinateSpace