我有一个继承自UIView的自定义类。在绘制方法中,我绘制了几个形状,包括一些圆形。我想要使圆圈的颜色(现在的笔触颜色)彼此独立地动画化,例如,我希望一个或多个圆圈的颜色“脉冲”或闪烁(使用轻松/缓出而不是线性)。
将此归档的最佳方式是什么?
能够使用内置动画代码(CABasicAnimation等)会很棒但是我不确定如何?
编辑:这是涉及的代码。 (我正在使用Xamarin.iOS,但我的问题不是特定于此)。
CGColor[] circleColors;
public override void Draw (RectangleF rect)
{
base.Draw (rect);
using (CGContext g = UIGraphics.GetCurrentContext ()) {
g.SetLineWidth(4);
float size = rect.Width > rect.Height ? rect.Height : rect.Width;
float xCenter = ((rect.Width - size) / 2) + (size/2);
float yCenter = ((rect.Height - size) / 2) + (size/2);
float d = size / (rws.NumCircles*2+2);
var circleRect = new RectangleF (xCenter, yCenter, 0, 0);
for (int i = 0; i < rws.NumCircles; i++) {
circleRect.X -= d;
circleRect.Y -= d;
circleRect.Width += d*2;
circleRect.Height += d*2;
CGPath path = new CGPath ();
path.AddEllipseInRect (circleRect);
g.SetStrokeColor (circleColors [i]);
g.AddPath (path);
g.StrokePath ();
}
}
}
答案 0 :(得分:0)
您需要将所有绘图代码移动到CALayer
的子类,并确定一旦变化,将生成所需动画的参数。将这些参数转换为图层的属性,您可以使用CABasicAnimation
(甚至[UIView animateXXX]
)为图层的属性设置动画。
有关详细信息,请参阅this SO question。
确保将图层rasterizationScale
设置为[UIScreen mainScreen].scale
,以避免在Retina上模糊。