2012-01-09 65 views
1

我想知道是否有人可以用这个问题指出我正确的方向。用自定义的UIBezierPath剪下图片

我有一个用户创建的UIBezierPath,有几个点来自用户触摸。

我可以通过使用[myPath fill];函数来获得这些图形,以在bog标准UIView上创建形状。

我最想做的就是使用该路径为UIImage创建剪贴蒙版 - 可能是UiImageView

我尝试将我的UIView更改为UIImageView,然后将此功能更改为[myPath addClip];,但由于某些原因,此功能无效。

回答

1

您需要创建图形上下文,绘制图像并使用kCGBlendModeDestinationIn绘制遮罩。这样的事情:

UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); // size is a CGSize of the result you want 
[image drawInRect:imageRect]; // image is the UIImage you want to clip, imageRect is the rect in the context where you want your image 
[mask drawInRect:rect blendMode:kCGBlendModeDestinationIn alpha:1.0]; // mask is a UIImage containing the mask you drew, rect is the rect in the context where you want your mask - could match imageRect above 
UIImage* uiImage = UIGraphicsGetImageFromCurrentImageContext(); 
+0

嗨 - 感谢您的回复。我尝试使用这种方法,但即时通讯的'面具'似乎不是正确的排序;显然它不能有一个alpha组件 - 甚至不是alpha = 1.0。 – Vazzyb 2012-01-09 17:51:09

+0

有两个视图:一个UIView和一个UIImageView,然后从视图控制器使用下面的代码似乎工作: – Vazzyb 2012-01-09 17:52:02

+1

CAShapeLayer * maskLayer = [CAShapeLayer layer]; maskLayer.fillColor = [[UIColor whiteColor] CGColor]; maskLayer.backgroundColor = [[UIColor clearColor] CGColor]; maskLayer.path = myPath.CGPath; [img removeFromSuperview]; img.layer.mask = maskLayer; [self.view addSubview:img]; – Vazzyb 2012-01-09 17:52:24