• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

CAShapeLayer和SpriteKit

IOS 来源:MP Droid 15次浏览

我想利用CAShapeLayer中的路径动画功能,该功能在SpriteKit中不可用,因此必须组合在同一视图中将CAShapeLayer与SpriteKit对象进行绘制的对象。CAShapeLayer和SpriteKit

坐标系似乎是相反的:CAShapeLayer似乎有+ ve y轴向下指向,而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坐标系指向+ ve Y轴向上?


===========解决方案如下:

不,写的文档,这是它如何工作的,你可反坐标,以满足您的要求..

Sprite kit docs:

单位坐标系统将原点底部框架的左上角和(1,1)在框架的右上角。精灵的锚点默认为(0.5,0.5),对应于帧的中心。

The rest of iOS:

的iOS。默认坐标系的原点位于绘图区域的左上角,正值向下和向右延伸。 您无法在iOS中更改视图坐标系的默认方向 – 也就是说,您无法“翻转”它。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)