我正在开发一款iPhone应用程序,当用户在图像上移动手指时,我需要通过将其alpha级别设置为0来使图像的一部分透明。基本上如果您碰巧知道应用程序商店应用程序iSteam,用户应该能够在顶部图像上移动手指,这将使背景图像透明。
目前我正在使用两个UIImageView。一个保持背景图像,另一个保持背景图像,保持较暗的图像。现在,用户应该能够在这个较暗的图像上绘制随机曲线,这将使背景图像的一部分显示在顶部。我无法弄清楚应该如何使顶部图像透明,这是两个UIImageView中最顶层的。
对此有何想法?另外我应该用什么呢? Quartz或Open GL。我是iPhone App Dev的新手,对这些API完全不了解,所以专家的一些指导肯定会帮助我开展iPhone SDK开发。
答案 0 :(得分: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中打孔。
以下是结果的屏幕截图: