2012-01-18 108 views
1

我有一個簡單的自定義UIView(矩形),它是用drawRect實現的。Animate自定義UIView

該視圖來自兩個值; CurrentValue的和包括maxValue

從的drawRect:

的矩形的高度表示有多少CurrentValue的是包括maxValue的:

if(currentValue > maxValue) 
    currentValue = maxValue; 

float scale = currentValue/maxValue; 

//Draw the rect 
CGContextBeginPath(context); 
CGContextMoveToPoint(context, self.bounds.origin.x, self.bounds.size.height); 
CGContextAddLineToPoint(context, self.bounds.size.width, self.bounds.size.height); 
CGContextAddLineToPoint(context, self.bounds.size.width, self.bounds.size.height-(self.bounds.size.height*scale)); 
CGContextAddLineToPoint(context, self.bounds.origin.x, self.bounds.size.height-(self.bounds.size.height*scale)); 
CGContextClosePath(context); 

CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0); 
CGContextFillPath(context); 
CGContextStrokePath(context); 

我設置一個視圖控制器與改變CurrentValue的和UISlider每次更改setNeedsDisplay時都會被調用。這部分工作得很好。完全按照計劃使用滑塊時,矩形會更改高度。

我的問題是..我想這高度之間的過渡是動畫。什麼是最好的方式來做到這一點?

謝謝

回答

1

而不是UIView與自定義繪圖您可以添加CAShapeLayer對象到您的視圖的圖層。 CAShapeLayer類允許指定繪製和繪製屬性的路徑 - 並且對這些屬性的更改也很容易生成動畫。

如果你的觀點僅僅是充滿了純色一個矩形的問題你的第二個選擇是要麼調整視圖的框架或設置相應的仿射變換,以獲得所需的高度 - 這兩個特性也容易動畫使用UIView類動畫的方法。

+0

謝謝,我結束了使用一個簡單的UIView矩形和改變框架,而不是在UIView animateWithDuration ..然後讓控制器完成它.. – Jach0 2012-01-18 23:06:59

1

如果你真的只是想可以由核心動畫層(如CAShapeLayerCAGradientLayer)可以得出一個簡單的形狀,你應該只使用一個核心動畫層和CABasicAnimation動畫層的框架。

如果您打算繪製更復雜的東西,並且想要對形狀進行動畫更改,那麼您需要做更多工作。你需要給你的對象屬性或實例變量來存儲當前值和最終值,也可以存儲值的速度。您需要創建一個CADisplayLink對象,並用它來驅動對您的動畫方法的調用。您的動畫方法應根據已經過多少時間更新當前值,然後致電setNeedsDisplay