0

我正在尝试产生一种效果,起初整个屏幕都被遮住了。当球在屏幕上移动时,球会揭开它所在的区域,而它所在的区域仍然没有被遮盖。

我有以下代码:

CALayer * ball = [CALayer layer];
ball.bounds = CGRectMake(0, 0, 42, 42);
ball.position = [[[alphabet controls] objectAtIndex:0] CGPointValue];
ball.contents = (id)([UIImage imageNamed:@"done.png"].CGImage);
[self.layer addSublayer:ball];

[self.layer setMask:ball];

CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
anim.path = path;
anim.repeatCount = HUGE_VALF;
anim.duration = 8.0;
[ball addAnimation:anim forKey:@"race"];

这个动画掩盖了整个视图,只显示了球层后面的内容。我的问题是:我怎样才能不掩盖屏幕上显示的部分?

4

1 回答 1

0

嗯。

您想要的是包含球形状经过的所有像素的图像。

如果您使用基于帧的动画为球设置动画,您可以创建一个灰度(或 1 位)图像并将其安装为遮罩层的内容。然后,当您移动球时,您可以在每一帧中将其绘制到您的蒙版图像中。

我不确定如何使用 Core 动画获得相同的效果。

您可以将您的蒙版设置为 CAShapeLayer,创建一个描述球的整个路径的 CGPath,并将其设置为形状图层的路径。如果你的球是圆形的,你可以将形状层的线条粗细设置为你的球大小。那会奏效。但是,如果您的球是不规则的形状,那么这种方法将行不通。iOS 上的 Quartz 图形没有任何我知道的方法可以用任意形状的画笔描边路径。

于 2012-04-27T02:56:55.610 回答