iOS:如何绘制随着时间推移逐渐消失的行(UIBezierpath或其他行),并在触摸它们时与视图交互?

时间:2015-05-08 15:34:02

标签: ios objective-c uibezierpath

例如:

我用手指画下面的橙色线,当它接触蓝色方块时,它们会亮起来。

我可以使用我发现的StackOverflow问题/教程中的UIBezierPath绘制一条线,但我不知道如何让它消失或与其他视图交互。

这不适用于游戏,只适用于常规iOS应用。我不确定这是否会改变一切。

有什么想法吗?

Example Image

我已经实现了一个不流畅的垃圾版本,但在线条画方面有我想要的感觉

//1

2 个答案:

答案 0 :(得分:1)

如果是"它"在"它接触蓝色方块",你的意思是线,这将很难做到。一行没有rect,所以你不能使用像CGRectIntersectsRect这样的方法来查看直线和方形是否相交。使用手指的触点(应该是线的位置)会更容易。您可能希望在数组中使用蓝色方块,并在touchesMoved内部循环遍历数组,以查看是否有任何方块包含触摸点(使用CGRectContainsPoint)。

答案 1 :(得分:1)

您可能已经进行了UIPanGesture设置或touchesBegan: / touchesMoved:实施,可以进行绘图。由于您总是在达到当前手指的位置,因此您可以使用平移手势或touche的locationInView: CGPoint(您应该已经使用它来更新您的UIBezierPath)检查它是否与CGRectContainsPoint的一个方格相交。

为了让你的线渐弱,最简单的方法是在你停止绘画时启动一个计时器,并使包含该绘图的图层逐渐消失:

CABasicAnimation *fadeAnim = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeAnim.fromValue = @(1);
fadeAnim.toValue = @(0);
fadeAnim.duration = 1;
[myLayer addAnimation:fadeAnim forKey:nil];
myLayer.opacity = 0;

或者你可以设置线条动画以使其缩短"缩短" (如蛇游戏),如果你使用CAShapeLayer:

CABasicAnimation *strokeAnim = [CABasicAnimation animationWithKeyPath:@"strokeStart"];
strokeAnim.fromValue = @(0);
strokeAnim.toValue = @(1);
strokeAnim.duration = 3;
[shapeLayer addAnimation:strokeAnim forKey:nil];

为了让它从线的开头逐渐消失到最近的部分,这是另一个故事,因为它要求你画画"你的线条有渐变色。