2010-02-27 109 views
0

我正在制作一个iPhone应用程序,其中有两个ImageView,当您触摸顶部的一个,无论您轻触哪一处,最下面的一个都会显示。如何在Quartz中剪切或更改图像的alpha(像素)?

基本上我想要做的是从图像中切出一个椭圆/圆角。要做到这一点,我正在考虑剪裁图像,或将矩形中的alpha像素更改为零。我是Quartz 2D Programming的新手,所以我不确定如何做到这一点。

假设我有:

UIImageView *topImage; 
UIImageView *bottomImage; 

如何从这些图像中删除的CGRect /椭圆/圆角矩形。 这就像那些彩票一样,如果你赢了,你必须刮掉。

回答

1

我通常会尝试从一个路径(这里包含一个圆角矩形)制作一个蒙版,然后用它掩盖图像,如apple docs中所示。这样做的好处之一是,对于命中测试,您需要做的仅仅是CGPathContainsPoint和被触摸的点(因为它将测试它是否在图像的可见区域)。

+0

那么,我该如何在这个方法中使用直接法? 我对Quartz – gizmoitai 2010-02-28 00:05:07

+0

没有经验,因此有关实际裁剪的文档部分位于底部(对不起,我忘了提及这一点),但基本上会创建一个路径,在需要的地方绘制一个圆角矩形,剪辑上下文绘制图像,(取消剪切路径?),然后继续。我没有包含特定的代码,因为它不必要,只是在苹果文档中进行函数调用。谷歌也。这里有一些用于圆角矩形的东西 http://www.drobnik.com/touch/2010/02/drawing-rounded-rectangles/ – 2010-02-28 04:03:34

+0

我试过这段代码: CGContextRef ctx = UIGraphicsGetCurrentContext(); \t CGRect frame = CGRectMake(100,100,100,100); \t CGPathRef roundedRectPath = [self newPathForRoundedRect:frame radius:5]; \t CGContextAddPath(ctx,roundedRectPath); \t CGContextClip(ctx); \t CGPathRelease(roundedRectPath); (与您发送的圆角矩形路径函数一起) 这是在一个白色的视图和视图下方有一个灰色的窗口,所以我认为这只会显示灰色,而不是在CGRect框架中的白色,但它没有做任何东西...... – gizmoitai 2010-02-28 05:18:18

0

我试过这段代码:

CGContextRef ctx = UIGraphicsGetCurrentContext(); 
CGRect frame = CGRectMake(100, 100, 100, 100); 
CGPathRef roundedRectPath = [self newPathForRoundedRect:frame radius:5]; 
CGContextAddPath(ctx, roundedRectPath); 
CGContextClip (ctx); 
CGPathRelease(roundedRectPath); 

(与您一起发送的圆角的矩形路径功能) 这是一个白的观点,有一个灰色的窗口视图下方,所以我认为这将只是在CGRect框架中显示灰色而不是白色,但它没有做任何事情...

+0

你需要把你真正想要在上下文剪辑和路径释放之间绘制的内容(例如,在'框架'中绘制图像) – 2010-02-28 05:43:34

+0

好吧,我试图在释放路径之前添加这个: [ bottomImage.image drawInRect:frame]; 它所做的只是在画框中再次绘制图像,显然......这不是我想要做的。我想从图像内切出帧。这样图像中间就有了一个透明的空间。 – gizmoitai 2010-03-01 03:33:02