是否可以動畫製作UIView
的CoreGraphics內容?爲UIView的CoreGraphics/drawRect內容製作動畫
說我有一個UIView
子類,稱爲MyView
實現了drawRect:
方法,像這樣:
- (void) drawRect: (CGRect) rect {
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(c, someColor);
CGContextSetLineWidth(c, someWidth);
CGContextMoveToPoint(c, leftOfMyUIView, topOfMyUIView);
CGContextAddLineToPoint(c, leftOfMyUIView, bottomOfMyUIView);
CGContextStrokePath(c);
}
換句話說 - 它繪製一條垂直線下來我UIView的子類的左手邊。是否有一種簡單的方法現在爲此UIView設置動畫,以便該線從視圖的左側移動到右側?我希望它從左向右「漂移」。
要清楚 - 我不會去的原因我不能移動/動畫MyView
的實例。我能想到的最佳解決方案是添加一個新的UIView
子類。像LineView extends UIView
之類的東西,然後使LineView看到我要繪製的線條的確切尺寸,用它自己的drawRect
方法填充它,然後將LineView
的實例添加到MyView
作爲子視圖。這將允許我使用動畫塊對LineView
對象的位置進行動畫處理,但是看起來過於複雜以至於無法實現如此簡單的操作。
您的更新幾乎是我第一次看到這個問題時要提出的答案... drawRect不是用於動畫,而是繪製在單個時間點上。您可以爲視圖的屬性(在本例中爲「中心」)設置動畫。使你的線條成爲子視圖或子層(CAShapeLayer爲了簡單起見,只是想到了這一點),並且這是實現它的唯一方法。 – jrturton
我正在處理的問題將意味着我需要創建這些'LineView'實例的許多(搜索)。我不會做任何比動畫每一行的位置更復雜的事情。鑑於此背景,您的兩個建議中的哪一個('UIView'或'CALayer')最適合?他們之間有很多表現明智的? – Barjavel
CAShapeLayer會是最好的 - 那麼你並沒有創建一個全新的視圖,它只是你視圖的一個屬性。 – jrturton