2017-07-25 188 views
1

我有麻煩試圖旋轉我得出以下代碼形狀:我嘗試使用:Swift:試圖旋轉繪製的形狀?

triangle.transform = triangle.transform.rotated(by: 3.14159) 

但給我的值類型的」錯誤‘CATransform3D’沒有成員「旋轉「」。我不知道如何旋轉形狀。

override func viewDidLoad() { 
    super.viewDidLoad() 
    let trianglePath = UIBezierPath() 
    trianglePath.move(to: CGPoint(x: UIScreen.main.bounds.size.width * 0.5, y: UIScreen.main.bounds.height * 0.5)) 
    trianglePath.addLine(to: CGPoint(x: (UIScreen.main.bounds.size.width * 0.5) + 100, y: (UIScreen.main.bounds.height * 0.5) - 50)) 
    trianglePath.addLine(to: CGPoint(x: (UIScreen.main.bounds.size.width * 0.5) + 100, y: (UIScreen.main.bounds.height * 0.5) + 50)) 
    trianglePath.close() 

    let triangle = CAShapeLayer() 
    triangle.path = trianglePath.cgPath 
    triangle.fillColor = UIColor.gray.cgColor 
    self.view.layer.addSublayer(triangle) 
} 
+2

**提示**這是有道理的,一個** ** 3D變換不支持圍繞一個未指定** **旋轉axis :-) –

+0

@NicolasMiari我以爲我使用的是2D變換?我應該使用CATransform3DMakeRotation嗎? – diet7up

回答

0

使用此旋轉你的三角形,您可以用使用CGAffineTransform

triangle.setAffineTransform(CGAffineTransform(rotationAngle: .pi)) 

或使用CATransform3D,通過PI

triangle.transform = CATransform3DMakeRotation(.pi, 0, 0, 1) 

,但這項工作需要在Z軸旋轉還調整了CAShapeLayer框架

triangle.frame = self.view.bounds //this do the trick 

對於動畫後顯示

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    UIView.animate(withDuration: 0.1) { 
      triangle.setAffineTransform(CGAffineTransform(rotationAngle: .pi)) //this 
      triangle.transform = CATransform3DMakeRotation(.pi, 0, 0, 1) //or this 
    } 
} 

希望這有助於

+0

給我的錯誤:「不能分配型‘CGAffineTransform’的價值鍵入‘CGTransform3D’」 – diet7up

+0

@ diet7up對不起,我沒有看到你的三角形是shapeLayer我會更新我的答案正確 –

+0

@Reiner那麼,這是否旋轉整個層?或者只是三角形?因爲使用此代碼時,形狀消失 – diet7up