2011-10-24 34 views
1

下面是一个示例图我现在所拥有的:从UIView的删除形状创建透明度

enter image description here

理想情况下,我想带一个“块”出前,所以任何意见底下是现在可以通过删除区域看到(例如透明度)。

enter image description here

我试着建立一个路径,然后使用CGContextClip尝试剪辑,但它似乎并没有被裁剪形状像预期。如何做到这一点的任何想法,或者即使它可能呢?

回答

1

通常做这样的事情,一个会使透明背景颜色的UIView,然后绘制的“背景”,通过手动CoreGraphics的。例如,为了使一种观点认为,实质上是一个带有黑色背景的圆圈,你可以做这样的事情在drawRect方法:

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

的东西比简单的圆形更复杂,你应该结合使用CGContextBeginPath()CGContextMoveToPoint()CGContextAddLineToPoint()功能。这将允许您使用背景所需的任何不透明形状制作透明视图。

编辑:对于重复的图案,你可以使用一个以上的呼叫CGContextDrawImage

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); 

很明显,但是这基本上是什么需求:剪辑的背景图像有一定的路径,你可以做这样的事情要做。就像我上面所说的,你可以使用基本的线条绘制功能来为你的路径添加线条,矩形,圆圈和其他东西。

+0

看,问题是它不只是一个简单的形状。这是一个动态的'UIView',我正在设置'backgroundColor'属性(使用模式图像)。所以,我不能只是静态地画在我的'的drawRect图像:'函数在我的'UIView'子类。 –

+0

您必须手动绘制背景图片使用剪裁。看我的编辑。 –

+0

是啊,我只是想避免这种情况,因为它是相当多的难以管理。哦,看起来这是唯一的方法。谢谢... –

0

使用[的UIColor clearColor]在你V至使它透明,你可能会设置视图不透明NO为好。