我正在开发一个 iPhone 应用程序,其中当用户在图像上移动手指时,我需要通过将其 alpha 级别设置为 0 来使图像的一部分透明。基本上,如果您碰巧知道应用程序商店应用程序 iSteam,用户应该能够在顶部图像上移动手指,这将使背景图像透明。
目前我正在使用两个 UIImageView。一个保存背景图像,另一个在其之上保存较暗的图像。现在用户应该能够在这个较暗的图像上绘制随机曲线,这将使背景图像的部分出现在顶部。我无法弄清楚应该如何使两个 UIImageView 中最顶部的顶部图像透明。
对此有什么想法吗?另外我应该用什么来做这个?石英或 Open GL。我是 iPhone 应用程序开发的新手,对这些 API 完全不了解,因此专家的一些指导肯定会帮助我在 iPhone SDK 开发方面取得进展。
UIImageView 有一个层,您可以将其称为它的layer
并在您将项目链接到 QuartzCore 时进行交谈。当用户移动手指时,在不透明颜色填充的图形上下文中剪切一个与 UIImageView 大小相同的清晰形状,将其转换为 CGImageRef,将其设置为 CALayercontents
(同样,这个 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 中打一个洞。
这是结果的屏幕截图:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)