“掩盖”动画? iPhone SDK

时间:2009-11-19 14:20:37

标签: iphone animation uiimageview mask

我一直在寻找在iPhone上屏蔽图像的方法。我遇到了这个解决方案

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

适用于静止图像。我想要做的是在UIImageView中屏蔽动画。根据我的阅读,我认为这不可能,同时也能达到合适的帧速率。

这让我想问以下是否可能,我可以“剪辑”UIImageView中的图像吗?即不重新调整UIImageView的大小到图像的大小,所以有些部分被砍掉了?

2 个答案:

答案 0 :(得分: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];

请注意,这实际上并不像您引用的链接那样创建新图像。这只会创建一个遮罩,用于在图像视图的顶部显示 - 这可能不是您想要的。

答案 1 :(得分: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,所以你根据你从哪里得到你的面具或maskee不受限制。

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