【问题标题】:iOS revealing / unmasking an image based on a path?iOS根据路径显示/取消屏蔽图像?
【发布时间】:2016-11-18 09:29:34
【问题描述】:

我正在尝试以动画方式绘制此特定图像:

但是,我意识到尝试使用 CGPath 绘制它是不可能的。我认为下一个解决方案是尝试根据其路径的近似值来显示此图像。所以我设法画出了一个接近这张图片的CGPath:

我希望有人能帮我弄清楚!

我确实有以下代码来至少描边路径。我正在使用 SVGKit 来帮助从 SVG 文件创建路径:

-(void)animateItAll{
    self.thePath = [UIBezierPath bezierPathWithCGPath:[PocketSVG pathFromSVGFileNamed:@"SquiggleLine"]];
    self.thePath.lineCapStyle = kCGLineCapRound;
    self.thePath.lineJoinStyle = kCGLineJoinRound;

CAShapeLayer *shapeView = [[CAShapeLayer alloc] init];
[shapeView setPath:self.thePath.CGPath];
shapeView.fillColor = [[UIColor clearColor] CGColor];
shapeView.strokeColor = [[UIColor redColor] CGColor];
shapeView.lineWidth = 8.0f;

[[self.view layer] addSublayer: shapeView];

CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
pathAnimation.duration = 1.0;
pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
pathAnimation.fromValue = [NSNumber numberWithFloat:0.0f];
pathAnimation.toValue = [NSNumber numberWithFloat:1.0f];
//pathAnimation.toValue = (id) self.thePath.CGPath;

[shapeView addAnimation:pathAnimation forKey:nil];

}

【问题讨论】:

    标签: ios objective-c cgpath


    【解决方案1】:

    不是用一条贝塞尔曲线来表示我们绘制的笔划,而是用两条贝塞尔路径之间的填充区域来表示它。通过稍微改变定义这两条贝塞尔曲线的控制点的偏移量,我们将设法实现平滑变化的笔宽的非常合理的效果。 https://code.tutsplus.com/tutorials/ios-sdk-advanced-freehand-drawing-techniques--mobile-15602

    在这个答案https://stackoverflow.com/a/5714872/2412568 的帮助下,您可以从 UIBezierPath 获得点数组

    【讨论】:

    • 我想我可以试一试,但是,我认为我不能完全做到这一点。是否可以根据路径显示顶部图像?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 2018-11-08
    相关资源
    最近更新 更多