4

我正在使用一个iPhone应用程序,其中我需要通过将图像的alpha级别设置为0来使图像的一部分透明,因为用户在图像上移动他的手指。基本上,如果你碰巧知道应用商店应用iSteam,用户应该能够在顶部图像上移动他的手指,这将使背景图像透明。在UIImageView的顶部绘图使图像透明

目前我正在使用两个UIImageView。一个持有背景图像,另一个持有较暗的图像。现在用户应该能够在这个较暗的图像上绘制随机曲线,这将使背景图像的一部分出现在最上面。我无法弄清楚应该如何让顶部图像透明,这是两个UIImageView最重要的部分。

对此有何想法?另外我应该使用什么?石英或Open GL。我是iPhone App Dev的新手,并且完全不了解这些API,所以来自专家的一些指导肯定会帮助我开发iPhone SDK开发。

回答

3

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。

这里的结果的截图:

image with a hole punched in it

+0

感谢@马特,我会尝试你的想法,现在 – 2011-12-26 04:07:34