在 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 中为多个形状设置动画的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Objective C 中为浮动 UIView 设置动画
如何使用自动布局在 UIScrollView 中为视图高度设置动画?