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

Posted

技术标签:

【中文标题】在 UIView 中为多个形状设置动画【英文标题】:Animate multiple shapes in UIView 【发布时间】:2014-11-24 17:08:09 【问题描述】:

我有一个继承自 UIView 的自定义类。在 draw 方法中,我绘制了几个形状,包括一些圆圈。我想为彼此独立的圆圈的颜色(现在的笔触颜色)设置动画,例如我希望一个或多个圆圈的颜色“脉冲”或闪烁(使用缓入/缓出而不是线性)。

归档此文件的最佳方式是什么?

如果能够使用内置动画代码(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】:

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

更多信息请参见this SO question。

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

【讨论】:

以上是关于在 UIView 中为多个形状设置动画的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中为两个 UIView 翻转设置动画?

如何在 Objective C 中为浮动 UIView 设置动画

如何使用自动布局在 UIScrollView 中为视图高度设置动画?

如何在不制作 IBOutlet 的情况下以编程方式在 Swift 中为 UIView 高度约束设置动画?

沿 konva 中的线或路径为形状设置动画

动画 UIView 形状及其内容