2015-04-09 2 views
0

Я установил круг с 4 даже секторов, используя следующий код:UIBezierPath вращаться вокруг точки внутри самого круга, быстры и SpriteKit

func centerCircle() { 

    let center = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)) 
    // node1 
    let node1bezierPath = UIBezierPath() 
    node1bezierPath.addArcWithCenter(center, radius: 100, startAngle: 0.78, endAngle: 2.35, clockwise: true) 
    node1bezierPath.addLineToPoint(center) 

    let node1 = SKShapeNode(path: node1bezierPath.CGPath) 
    node1.strokeColor = SKColor.redColor() 
    node1.fillColor = SKColor.redColor() 
    self.addChild(node1) 
    // node2 
    let node2bezierPath = UIBezierPath() 
    node2bezierPath.addArcWithCenter(center, radius: 100, startAngle: 2.35, endAngle: 3.92, clockwise: true) 
    node2bezierPath.addLineToPoint(center) 

    let node2 = SKShapeNode(path: node2bezierPath.CGPath) 
    node2.strokeColor = SKColor.blueColor() 
    node2.fillColor = SKColor.blueColor() 
    self.addChild(node2) 
    // node3 
    let node3bezierPath = UIBezierPath() 
    node3bezierPath.addArcWithCenter(center, radius: 100, startAngle: 3.92, endAngle: 5.48, clockwise: true) 
    node3bezierPath.addLineToPoint(center) 

    let node3 = SKShapeNode(path: node3bezierPath.CGPath) 
    node3.strokeColor = SKColor.greenColor() 
    node3.fillColor = SKColor.greenColor() 
    self.addChild(node3) 
    // node4 
    let node4bezierPath = UIBezierPath() 
    node4bezierPath.addArcWithCenter(center, radius: 100, startAngle: 5.48, endAngle: 0.78, clockwise: true) 
    node4bezierPath.addLineToPoint(center) 

    let node4 = SKShapeNode(path: node4bezierPath.CGPath) 
    node4.strokeColor = SKColor.yellowColor() 
    node4.fillColor = SKColor.yellowColor() 
    self.addChild(node4) 

} 

То, что я хочу, чтобы достичь является этот круг будет вращаться вокруг своего центра по 90 градусов, когда я нажимаю на экран.

center = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)) 

Я попытался установить centerCircle() -> SKSpriteNode и добавьте SKAction.rotateByAngle, он не работает. И я искал некоторые другие сообщения в StackOverflow, и вам не удавалось заставить их работать. Любые идеи, как я могу заставить его работать? Большое спасибо.

ответ

0

Вы можете добавить SKShapeNodes в номер SKNode, а затем вращать код SKNode. Например, вы можете создать собственный класс SKNode как этот

class FourColorCircle : SKNode { 

    override init() { 
     super.init() 
     self.createCircle() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

    func createCircle() { 
     let center = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)) 
     // node1 
     let node1bezierPath = UIBezierPath() 
     node1bezierPath.addArcWithCenter(center, radius: 100, startAngle: 0.78, endAngle: 2.35, clockwise: true) 
     node1bezierPath.addLineToPoint(center) 

     let node1 = SKShapeNode(path: node1bezierPath.CGPath) 
     node1.strokeColor = SKColor.redColor() 
     node1.fillColor = SKColor.redColor() 
     self.addChild(node1) 
     // node2 
     let node2bezierPath = UIBezierPath() 
     node2bezierPath.addArcWithCenter(center, radius: 100, startAngle: 2.35, endAngle: 3.92, clockwise: true) 
     node2bezierPath.addLineToPoint(center) 

     let node2 = SKShapeNode(path: node2bezierPath.CGPath) 
     node2.strokeColor = SKColor.blueColor() 
     node2.fillColor = SKColor.blueColor() 
     self.addChild(node2) 
     // node3 
     let node3bezierPath = UIBezierPath() 
     node3bezierPath.addArcWithCenter(center, radius: 100, startAngle: 3.92, endAngle: 5.48, clockwise: true) 
     node3bezierPath.addLineToPoint(center) 

     let node3 = SKShapeNode(path: node3bezierPath.CGPath) 
     node3.strokeColor = SKColor.greenColor() 
     node3.fillColor = SKColor.greenColor() 
     self.addChild(node3) 
     // node4 
     let node4bezierPath = UIBezierPath() 
     node4bezierPath.addArcWithCenter(center, radius: 100, startAngle: 5.48, endAngle: 0.78, clockwise: true) 
     node4bezierPath.addLineToPoint(center) 

     let node4 = SKShapeNode(path: node4bezierPath.CGPath) 
     node4.strokeColor = SKColor.yellowColor() 
     node4.fillColor = SKColor.yellowColor() 
     self.addChild(node4) 

    } 

    func rotate(angle : CGFloat, animated : Bool) { 
     var rotateAction : SKAction! 

     if animated { 
      rotateAction = SKAction.rotateByAngle(angle, duration: 0.6) 
     } 
     else { 
      rotateAction = SKAction.rotateByAngle(angle, duration: 0) 
     } 

     self.runAction(rotateAction) 
    } 
} 

Затем вы можете использовать его, как это,

let circle = FourColorCircle() 
addChild(circle) 
circle.position = CGPointMake(200, 200) 
circle.rotate(3.14/2, animated: true) 
+0

Привет @rakeshbs, Я новичок в программировании, могли бы вы объяснить больше 'переопределение инициализации() { super.init() self.createCircle()} требует инициализации (кодер aDecoder: NSCoder)? { super.init (кодер: aDecoder) }' Благодаря. –

+0

Они инициализаторы. https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html – rakeshbs

+0

Большое спасибо, я взгляну на ссылку. –

Смежные вопросы