工作,我有一個進度法here:CABasicAnimation上CAShapeLayer不通路改變
func progress(incremented : CGFloat){
if incremented <= self.bounds.width{
self.progressLayer.removeFromSuperlayer()
let originBezierPathProg = UIBezierPath(roundedRect: CGRect(x:0, y:0, width:0, height:self.bounds.height) , cornerRadius: self.viewCornerRadius)
originBezierPathProg.close()
let newBezierPathProg = UIBezierPath(roundedRect: CGRect(x:0, y:0, width:incremented, height:self.bounds.height) , cornerRadius: self.viewCornerRadius)
bezierPathProg.close()
self.progressLayer.path = originBezierPathProg.cgPath
self.borderLayer.addSublayer(self.progressLayer)
let animation = CABasicAnimation(keyPath: "path")
animation.fromValue = originBezierPathProg.cgPath
animation.toValue = newBezierPathProg.cgPath
animation.duration = 1
self.progressLayer.add(animation, forKey: animation.keyPath)
self.progressLayer.path = newBezierPathProg.cgPath
}
}
我試圖使動畫的方式進度條的進展。但是當我打電話給progress(100)
時,它只是在沒有動畫的情況下渲染欄。
我該如何解決?
更新:根據Rob的建議創建了MCVE:https://github.com/utkarsh2012/ProgressBarTest。我期待進度條動畫從寬度= 0 WIDTH = X(比方說60)
類似於這樣的問題CABasicAnimation with CALayer path doesn't animate
雖然這[可能會收緊一點](https://gist.github.com/robertmryan/eb8a9a422ad3820e3eb20fe143be3893),它對我來說很有效。所以問題在於你如何調用它(太早,太頻繁,從後臺線程),或者你的'bounds'或'incrementated'值是''if'語句失敗。我們需要問題的可生成的例子。 – Rob
讓我想出一個有這個問題的簡單項目。幾個小時以來一直在掙扎,我認爲真正的問題是它從UIView的var ididSet被調用(可能爲時過早?)。之後我也會做佈局。看看setupView:https://github.com/TwoPence/TwoPence/blob/milestone/TwoPence/MilestoneFutureView.swift – zengr
很難說。這裏有一些不相關的東西,但同時,還不足以重現問題。如果您希望我們提供幫助,我們確實需要[MCVE](http://stackoverflow.com/help/mcve),即向我們展示如何創建空白項目,插入顯示您問題的最少量代碼。或者,如果您想自己診斷問題,請添加調試代碼,以檢查(a)確保它在主線程上發生; (b)當'progress(增加:)'被調用時,你認爲'bounds'是' (c)「遞增」值是多少。 – Rob