2

我已经设置了一个形状和一个图像,我想用它来掩盖我的形状。我将它们的中心都设置在画布的中心,然后我写道:

shape.mask = img;

但这给了我非常奇怪的结果。形状似乎被掩盖了......有点......唯一出现的部分是右下角,左半部分和上半部分被切断。

我还尝试了两个图像和两个形状。两者似乎都不起作用。
我错过了一步吗?也许我试图掩盖的图像没有任何 alpha 值(我猜这里,我看到它在另一个问题中提到它们必须是具有 alpha 值的图像并且他们提到了 .png 文件,所以这就是我用了)?

当我尝试使用两种形状时,我尝试将我想要遮罩的形状的填充的 alpha 值设置为 0.5 和 0.0,并且也只是将 fillColor 设置为 Nil ......仍然没有。

我也(在最后一次绝望的尝试中)尝试了这里描述的方法:Mask a view in Objective-C但我对 Objective-c 本身不是很好,所以这也不起作用。

在 C4 中屏蔽的正确方法是什么?

4

1 回答 1

1

你掩饰的方式是对的。

发生的事情是对象的掩码必须根据对象本身的坐标空间进行定位。当您将子视图添加到对象时,它会相对于对象的 {0,0} 定位。

以下代码将起作用并向您展示两件事。

首先,遮罩形状位于对象的中心,而不是画布的中心:

s.center = CGPointMake(m.width/2,m.height/2);

其次,当您触摸画布时,动画将触发遮罩移动到画布的“中心”坐标,但您会注意到它离得更远了。这是因为它从图像的原点开始计算其位置。

@implementation C4WorkSpace {
    C4Image *m;
    C4Shape *s;
}

-(void)setup {
    m = [C4Image imageNamed:@"C4Sky"];
    s = [C4Shape ellipse:CGRectMake(0, 0, m.height, m.height)];

    m.center = self.canvas.center;
    s.center = CGPointMake(m.width/2,m.height/2);
    m.mask = s;
    [self.canvas addImage:m];
}

-(void)touchesBegan {
    s.animationDuration = 1.0f;
    s.center = self.canvas.center;
}

@end
于 2013-01-31T18:49:06.840 回答