4

我一直在研究如何在 iPhone 上屏蔽图像。我遇到了这个解决方案

http://iosdevelopertips.com/cocoa/how-to-mask-an-image.html

这对静止图像非常有用。我想要做的是在 UIImageView 中屏蔽动画。从我读过的内容来看,我认为这是不可能的,同时还能实现不错的帧速率。

这让我问以下是否可能,我可以“剪辑” UIImageView 内的图像吗?即不将 UIImageView 的大小重新调整为图像的大小,以便将某些部分切掉?

4

2 回答 2

8

我还没有尝试过这个性能,但你可以使用核心动画层作为蒙版。您可以定义要在 CAShapeLayer 中使用的路径并填充形状。然后指定 UIImageView 图层的图层蒙版。就像是:

CGMutablePathRef path = CGPathCreateMutable();
// build the path by adding points
// ...

CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init];
[shapeLayer setPath:path];
[shapeLayer setFillColor:[[UIColor blackColor] CGColor]];
// Set shape layer bounds and position
// ...

// Set the mask for the image view's layer
[[imageView layer] setMask:shapeLayer];

请记住,这实际上并没有像您引用的链接那样创建新图像。这只是在您的图像视图顶部创建一个显示蒙版——这可能不是您想要的。

于 2009-11-19T17:30:50.337 回答
5

我搜索了高低,最终找到了一个几乎没有任何限制的解决方案。所以,给你:

UIImageView *maskeeImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MaskeeImage.png"]];

[maskeeImage setAnimationRepeatCount:-1];
[maskeeImage setAnimationImages:[[NSArray alloc] initWithObjects:[UIImage imageNamed:@"MaskeeImage1.png"], [UIImage imageNamed:@"MaskeeImage2.png"], [UIImage imageNamed:@"MaskeeImage3.png"], nil]];
[maskeeImage startAnimating];

CALayer *maskeeLayer = [maskeeImage layer];
maskeeLayer = CGRectMake(0, 0, 768, 1004);
[[[self view] layer] addSublayer:maskeeLayer];

UIImage *maskImage = [UIImage imageNamed:@"ImageMask.png"];
CALayer *maskLayer = [CALayer layer];
maskLayer.contents = (id) myImageMask.CGImage;
maskLayer.frame = CGRectMake(0, 0, 768, 1004);
[maskeeLayer setMask:maskLayer];

给你!其实很简单,只要你知道怎么做。我试图展示一些不同的选择;使用 UIImageViews 或 UIImages,动画(也可以用于遮罩)。

总而言之,您基本上必须在视图的 CALayer 上设置 mask 属性。每个 UIView 子类都有一个 CALayer 附加到它,所以你在从哪里获取你的面具或被面具人方面完全不受限制。

希望这有帮助。干杯,迪伦。

于 2010-10-07T04:26:45.037 回答