UIImageView有一个图层,您可以将其引用为其layer
,并在将项目链接到QuartzCore时进行讨论。当用户移动一个手指时,在一个与UIImageView相同大小的不透明颜色填充图形上下文中剪下一个清晰的形状,将其转换为CGImageRef,将其设置为CALayer的contents
(同样,CALayer的大小必须与UIImageView),并将该图层设置为UIImageView的layer.mask
。无论在哪里清除遮罩,都会在图层上打一个透明孔,这意味着视图,这意味着UIImageView显示的图像。 (如果这不起作用,因为UIImageView不喜欢你干扰它的图层,你可以使用UIImageView的超级视图来代替。)
编辑(第二天) - 下面是图层委托的示例代码,冲头在中心的圆形孔:
-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)c {
CGRect r = CGContextGetClipBoundingBox(c);
CGRect r2 = CGRectInset(r, r.size.width/2.0 - 10, r.size.height/2.0 - 10);
UIImage* maskim;
{
UIGraphicsBeginImageContextWithOptions(r.size, NO, 0);
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextAddEllipseInRect(c, r2);
CGContextAddRect(c, r);
CGContextEOClip(c);
CGContextSetFillColorWithColor(c, [UIColor blackColor].CGColor);
CGContextFillRect(c, r);
maskim = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
CALayer* mask = [CALayer layer];
mask.frame = r;
mask.contents = (id)maskim.CGImage;
layer.mask = mask;
}
所以,如果该层是一个视图的层,并且如果是的UIImageView该视图的子视图中,一个孔设置在冲压的UIImageView。
这里的结果的截图:
感谢@马特,我会尝试你的想法,现在 – 2011-12-26 04:07:34