iOS:如何为uibezierpath中的填充设置动画?

Posted

技术标签:

【中文标题】iOS:如何为uibezierpath中的填充设置动画?【英文标题】:iOS: how to animate the fill in uibezier path? 【发布时间】:2015-08-05 05:53:00 【问题描述】:

我正在开发一款儿童字母追踪应用程序 - 请参阅随附的屏幕截图。

我能够通过使用由字体字形标识的 bezierpath 来显示字母,并允许在 bezierpath 内写入触摸。

现在,我想添加一个帮助动画,以便它显示如何从头到尾写这封信。

怎么做?

考虑我们显示“A”,我想展示动画展示如何为孩子们写“A”。

任何指针/想法。

非常感谢。

【问题讨论】:

更新了我到目前为止的动画。但这不是我想要的。 【参考方案1】:

我在我的应用程序中使用了这个动画。创建了一个顺时针填充点的圆形进度条

CABasicAnimation *pathAnim = [CABasicAnimation animationWithKeyPath: @"path"];
pathAnim.toValue = (id)newPath.CGPath;

// -- initialize CAAnimation group with duration of 0.2secs and beginTime will begin after another.
CAAnimationGroup *anims = [CAAnimationGroup animation];
anims.animations = [NSArray arrayWithObjects:pathAnim, nil];
anims.removedOnCompletion = NO;
anims.duration = 0.2f;
anims.beginTime = CACurrentMediaTime() + anims.duration*i;
anims.fillMode  = kCAFillModeForwards;
[anims setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];

[progressLayer addAnimation:anims forKey:nil];

【讨论】:

【参考方案2】:

没有直接的方法可以做到这一点。我想以下是最容易实现的:

    为每个字符创建一个路径,以跟踪笔画的书写方式。如果您在字母表中的字符数量有限,则可以手动执行此操作。你可以实现这样的东西来捕获路径:http://code.tutsplus.com/tutorials/smooth-freehand-drawing-on-ios--mobile-13164

    使用您当前的路径(照片中的红色)作为剪贴蒙版,这样填充就不会溢出。

    描边你在 1. 中创建的路径,用很粗的描边来填充。

【讨论】:

【参考方案3】:

我找不到一种“内置”方式来根据需要为填充设置动画。但是,有一种内置方法可以为笔画设置动画:

使用UIViewCAShapeLayer 支持它。 CAShapeLayer 有一个 path 属性。然后,您可以将动画应用到图层的 strokeStart 和/或 strokeEnd 属性。

希望对你有帮助。

【讨论】:

是的,我能够为笔画制作动画,附上 gif,但这不是我想要的。感谢您的帮助。【参考方案4】:

加载您的bezierpath 后添加初始化动画:

CAKeyframeAnimation *shapeKeyframeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"strokeEnd"];
shapeKeyframeAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
shapeKeyframeAnimation.keyTimes = @[@0.0f, @0.6f, @1.0f];
shapeKeyframeAnimation.values =  @[@0.0f, @1.0f, @1.0f];
shapeKeyframeAnimation.duration = 4.0f;
shapeKeyframeAnimation.repeatCount = CGFLOAT_MAX;

然后将其添加到您的形状层:

[shapeLayer addAnimation:_loadingKeyframeAnimation forKey:@"stoke"];

【讨论】:

此动画将为路径的笔划设置动画。 OP 要求使用该解决方案无法实现的填充动画。此解决方案唯一可以解决所请求问题的情况是,如果字母的形状是简单的贝塞尔路径,没有要填充的空间。

以上是关于iOS:如何为uibezierpath中的填充设置动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 UIBezierPath 提供cornerRadius

在 Flutter 应用程序中单击时如何为下拉按钮中的项目设置填充

iOS 11 PDFKit 墨水注释 - 无法填充 UIBezierPath

iOS贝塞尔曲线(UIBezierPath)的基本使用方法

如何为 CAShapeLayer 路径和填充颜色设置动画

iOS UIImageView如何为圆形ImageView添加填充