从UIView中删除形状以创建透明度

时间:2011-10-24 00:31:38

标签: iphone objective-c cocoa-touch uiview

以下是我现在的示例视图:

enter image description here

理想情况下,我想从顶部取出一个“块”,因此现在可以通过删除的区域(例如透明度)看到下面的任何视图。

enter image description here

我已尝试创建路径,然后使用CGContextClip尝试剪辑,但它似乎没有按预期剪裁形状。关于如何做到这一点的任何想法,或者即使它可能都有可能吗?

2 个答案:

答案 0 :(得分:1)

通常要做这样的事情,可以制作一个透明背景颜色的UIView,然后通过CoreGraphics手动绘制“背景”。例如,要创建一个基本上是黑色背景的圆圈的视图,您可以在drawRect方法中执行以下操作:

- (void)drawRect:(CGRect)dirtyRect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 0, 0, 0, 1);
    CGContextFillElipseInRect(context, self.bounds);
}

对于比简单圈子更复杂的内容,您应该将CGContextBeginPath()CGContextMoveToPoint()CGContextAddLineToPoint()函数结合使用。这将允许您创建一个透明视图,其中包含您想要背景的任何不透明形状。

编辑:要将背景图像剪辑到某个路径,您可以执行以下操作:

CGContextSaveGState(context);
CGImageRef image = [[UIImage imageNamed:@"backgroundImage.png"] CGImage];
CGContextBeginPath(context);
// add your shape to the path
CGContextClipToPath(context);
CGContextDrawImage(context, self.bounds, image);
CGContextRestoreGState(context);

显然,对于重复模式,您可以使用多个CGContextDrawImage调用,但这基本上是需要完成的。就像我上面说的那样,你可以使用基本的线条绘制功能在你的路径中添加线条,矩形,圆圈和其他任何东西。

答案 1 :(得分:0)

在V中使用[UIColor clearColor]使其透明,您可能还必须将视图不透明设置为NO。