在UIView中为多个形状设置动画

时间:2014-11-24 17:08:10

标签: ios animation uiview core-graphics

我有一个继承自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 ();
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

您需要将所有绘图代码移动到CALayer的子类,并确定一旦变化,将生成所需动画的参数。将这些参数转换为图层的属性,您可以使用CABasicAnimation(甚至[UIView animateXXX])为图层的属性设置动画。

有关详细信息,请参阅this SO question

确保将图层rasterizationScale设置为[UIScreen mainScreen].scale,以避免在Retina上模糊。