2017-03-27 76 views
0

這是從我的自定義類中提取的,即繪製一些圖形。功能drawTick()增加CAShapeLayer用藍色長方形我GameTimerUIView無法更改AnchorPoint for CAShapeLayer iOS Swift

class GameTimer: UIView { 

var tick = CAShapeLayer() 
... 

init(){ 
    super.init(frame: CGRect(x: 0, y: 0, width: 200, height: 200) 
} 
... 

func drawTick() { 
tick.path = UIBezierPath(rect: CGRect(x: 0, y: 0, width: 50, height: 50)).cgPath 
tick.fillColor = UIColor.blue.cgColor 
self.layer.addSublayer(tick) 
tick.anchorPoint = CGPoint(x: 0.5, y: 0.5) 
tick.position = CGPoint(x: bounds.midX, y: bounds.midY) 
tick.transform = CATransform3DMakeRotation(0.degreesToRadians, 0, 0, 1) 
} 

... 

} 

extension Double { 
    var degreesToRadians : CGFloat { 
     return CGFloat(self) * CGFloat(M_PI)/180.0 
    } 
} 

enter image description here

通過

tick.transform = CATransform3DMakeRotation(45.degreesToRadians, 0, 0, 1) 

旋轉角度爲45度的變遷給下一個結果:

enter image description here

在這裏我看到,聲明的錨點不會影響tick圖層 - 它應該位於藍色矩形的中心。旋轉繞座標(x:0,y:0)旋轉 - 藍色矩形的左上角 - tick.position。 這個問題 - 爲什麼宣稱anchorPoint的位置不適用於tick層?這裏的行爲很奇怪,假設anchorPoint的默認位置應該已經是(x: 0.5, y: 0.5)而沒有任何手動覆蓋,但是如果我刪除這個覆蓋 - 沒有任何更改。

回答

1

tick圖層沒有大小。它看起來正確的原因是路徑沒有被限制到邊界(即被繪製在邊界之外)。

如果您將形狀圖層與圓形矩形相同,則可以看到圍繞中心的旋轉。

+0

謝謝!正如你所提到的那樣工作。 –