簡體   English   中英

CALayer 圍繞中心旋轉

[英]CALayer Rotation around center

我想做一些像圓形進度條、在 UIView 中繪制貝塞爾曲線之類的事情,但它似乎由 PI/2 旋轉。 所以我需要通過 PI/2 旋轉它。 問題是,它正在圍繞一些非常奇怪的點旋轉,我不知道如何處理。 我試圖按照這些說明進行操作,但無濟於事,因為我想圍繞中心旋轉它。 這是我的代碼:

required init(coder aDecoder: NSCoder) {
    ringLayer = CAShapeLayer()
    ringLayerBackground = CAShapeLayer()
    super.init(coder: aDecoder)
    ringLayer.lineCap = kCALineCapButt
    ringLayer.fillColor = nil
    ringLayerBackground.lineCap = kCALineCapButt
    ringLayerBackground.fillColor = nil
    ringLayerBackground.strokeColor = UIColor(white: 0.5, alpha: 0.1).CGColor
    }


override func layoutSubviews() {
    layer.addSublayer(ringLayer)
    layer.addSublayer(ringLayerBackground)
    addSubview(imageView)
    let rectForRing = CGRectInset(bounds, lineWidth/2, lineWidth/2)        
    //ringLayer.setAffineTransform(CGAffineTransformMakeRotation(5))
    ringLayer.transform = CATransform3DRotate(ringLayer.transform, CGFloat(-M_PI/20), 0.0, 0.0, 1.0)
    //Tried both ways
    ringLayer.path = CGPathCreateWithEllipseInRect(rectForRing, nil)
    ringLayerBackground.path = CGPathCreateWithEllipseInRect(rectForRing, nil)
    super.layoutSubviews()
    }

這是我得到的

我知道有很多類似的問題,但它們無濟於事。 謝謝!

更新發現幻數,適用於 iPhone 6: 140

let o = 140.0
ringLayer.transform = CATransform3DTranslate(ringLayer.transform, CGFloat(o), CGFloat(o), 0)
ringLayer.transform = CATransform3DRotate(ringLayer.transform, CGFloat(-M_PI/2), 0.0, 0.0, 1.0)
ringLayer.transform = CATransform3DTranslate(ringLayer.transform, CGFloat(-o), CGFloat(-o), 0)

工作正常,但我無法猜測這個數字來自哪里。

更新解決了它。 它是ringLayer.position中的東西,需要將其設置為視圖的中心。 之后,我為貝塞爾路徑制作了 rect ,使其中心與ringLayer.position相同。 所以代碼變得復雜,@chrisco 的解決方案更適用。

要回答您的問題,但不是您的直接問題:

var progreessLayer = CAShapeLayer()
// add layer to your view etc

var path = UIBezierPath(arcCenter: center,
    radius: 100, startAngle: CGFloat(-M_PI_2),
    endAngle: CGFloat(3 * M_PI_2), clockwise: true)
progreessLayer.path = path.CGPath
progreessLayer.lineWidth = 10
progreessLayer.strokeColor = UIColor.blackColor().CGColor
progreessLayer.fillColor = nil

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM