我正在尝试使用CAShapeLayer中的路径动画功能,这在SpriteKit中是不可用的,因此必须在同一视图中组合使用CAShapeLayer和SpriteKit对象绘制的对象。
坐标系似乎是反向的:CAShapeLayer似乎有+ ve轴向下,而SKScene指向上方。
下面是一个简单的XCODE游乐场,它试图从0,0到200,100绘制一条黄色线,并用一条较粗的红线遮住它。
import SpriteKit
import PlaygroundSupport
let bounds = CGRect(x: 0, y: 0, width: 400, height: 200)
let view = SKView(frame: bounds)
view.backgroundColor = UIColor.lightGray
PlaygroundPage.current.liveView = view
// Create SK Scene
let scene = SKScene(size: CGSize(width: 400, height: 200))
scene.scaleMode = SKSceneScaleMode.aspectFit
view.presentScene(scene);
// Define the path
let path: CGMutablePath = CGMutablePath();
path.move(to: CGPoint(x:0, y:0))
path.addLine(to: CGPoint(x:200, y:100))
// Use CAShapeLayer to draw the red line
var pathLayer: CAShapeLayer = CAShapeLayer()
pathLayer.path = path
pathLayer.strokeColor = UIColor.red.cgColor
pathLayer.fillColor = nil
pathLayer.lineWidth = 4.0
pathLayer.lineJoin = kCALineJoinBevel
pathLayer.zPosition = 1;
view.layer.addSublayer(pathLayer);
//Use SKShapeNode to draw the yellow line
let pathShape: SKShapeNode = SKShapeNode(path: path);
pathShape.strokeColor = .yellow;
pathShape.lineWidth = 1.0;
pathShape.zPosition = 10;
scene.addChild(pathShape);
我预计黄线与红线重合。然而,黄色和红色线条显示为镜像。
无论如何重新定义CAShapeLayer坐标系以向上指向+ Y轴吗?
答案 0 :(得分:0)
不,正如文档中所描述的那样,它可以反转坐标以符合您的要求。
单位坐标系将原点放置在框架的左下角,将(1,1)放置在框架的右上角。精灵的锚点默认为(0.5,0.5),它对应于帧的中心。
的iOS。默认坐标系的原点位于绘图区域的左上角,正值从其向下和向右延伸。 您无法在iOS中更改视图坐标系的默认方向 - 也就是说,您无法“翻转”它。