ios - 如何进行 CGPath 或 SKShapeNode 旋转

标签 ios swift sprite-kit cgpath skshapenode

我想将旋转的椭圆路径添加到一个中心点。如下图,但随机旋转椭圆。

atom

绘制这些椭圆轨道,

roadShape = SKShapeNode(ellipseInRect: centeredRect)
roadShape.strokeColor = UIColor.greenColor()
self.parent!.addChild(roadShape)

需要让小粒子跟随那些椭圆轨道,这就是为什么我需要一条路径。

var followPath = SKAction.followPath(roadShape.path, asOffset: false, orientToPath: true, duration: 10);
particle.runAction(followPath)

我使用 SKShapeNode 绘制并获取路径属性。但不幸的是,SKShapeNode 没有任何原点或 anchor 属性,所以我无法正确旋转到 SKShapeNode。你有什么建议让它旋转或以不同的方式。

提前致谢。

最佳答案

let roadShape1 = SKShapeNode(ellipseInRect: CGRectMake(-100, -25, 200, 50))
roadShape1.strokeColor = UIColor.greenColor()
roadShape1.lineWidth = 3
roadShape1.position = CGPoint(x:frame.midX, y: frame.midY)
addChild(roadShape1)


let roadShape2 = SKShapeNode(ellipseInRect: CGRectMake(-100, -25, 200, 50))
roadShape2.strokeColor = UIColor.greenColor()
roadShape2.lineWidth = 3

let action2 = SKAction.rotateByAngle(CGFloat(M_PI)*0.75, duration:0)
roadShape2.runAction(action2)
roadShape2.position = CGPoint(x:frame.midX, y: frame.midY)
addChild(roadShape2)


let roadShape3 = SKShapeNode(ellipseInRect: CGRectMake(-100, -25, 200, 50))
roadShape3.strokeColor = UIColor.greenColor()
roadShape3.lineWidth = 3

let action3 = SKAction.rotateByAngle(CGFloat(M_PI)*0.25, duration:0)
roadShape3.runAction(action3)
roadShape3.position = CGPoint(x:frame.midX, y: frame.midY)
addChild(roadShape3)

您还可以使用 applyTransform 将旋转应用到 bezierPath 而不是 SKShapeNode 如下:

let roadPath1 = UIBezierPath(ovalInRect: CGRect(x: -100, y: -25, width: 200, height: 50))
let roadPath2 = UIBezierPath(ovalInRect: CGRect(x: -100, y: -25, width: 200, height: 50))
roadPath2.applyTransform(CGAffineTransformMakeRotation(45.0 * CGFloat(M_PI) / 180))
let roadPath3 = UIBezierPath(ovalInRect: CGRect(x: -100, y: -25, width: 200, height: 50))
roadPath3.applyTransform(CGAffineTransformMakeRotation(135.0 * CGFloat(M_PI) / 180))

let roadShape1 = SKShapeNode(ellipseInRect: CGRectMake(-100, -25, 200, 50))
roadShape1.path = roadPath1.CGPath
roadPath1.stroke()
roadShape1.lineWidth = 3
roadShape1.position = CGPoint(x:frame.midX, y: frame.midY)
addChild(roadShape1)

let roadShape2 = SKShapeNode(ellipseInRect: CGRectMake(-100, -25, 200, 50))
roadShape2.path = roadPath2.CGPath
roadPath2.stroke()
roadShape2.lineWidth = 3
roadShape2.position = CGPoint(x:frame.midX, y: frame.midY)
addChild(roadShape2)

let roadShape3 = SKShapeNode(ellipseInRect: CGRectMake(-100, -25, 200, 50))
roadShape3.path = roadPath3.CGPath
roadPath3.stroke()
roadShape3.lineWidth = 3
roadShape3.position = CGPoint(x:frame.midX, y: frame.midY)
addChild(roadShape3)

关于ios - 如何进行 CGPath 或 SKShapeNode 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31225501/

相关文章:

swift - 将 SKShapeNode 与 UIBezierpath 结合使用时不会进行碰撞检测

ios - Google Analytics 集成不适用于 iOS 应用程序

objective-c - 使用现有的 UINavigationController 在 UIPopoverController 中显示 UIImagePickerController(添加后退按钮)

ios - firebase通知,ios应用程序立即启动和关闭

swift - Grand Central Dispatch 寻找不同的方法

ios - 是否可以在 Spritekit 项目中以编程方式更改纹理色调?

ios - 我们需要 checkin *.xcuserstate 吗?

ios - 如何在 iOS 上删除相册?

Swift:当要为某个部分呈现内容时,请指定有效的部分定义。这是客户端错误

ios - 从图层重新加载 tableView 时崩溃