主题,实际上更专业的说法是抠图。
具体的逻辑是通过 UIBezierPath 可以描绘出不规则的形状,在通过这样不规则的形状进行抠图。
代码胜千言:
/**
通过曲线返回视图对应的UIImage
@param bezierPath 贝尔曲线
@return 返回UIImage
*/
- (UIImage*)maskWithBezierPath:(UIBezierPath*)bezierPath {
// 通过曲线创建一个图层
CAShapeLayer* layer = [[CAShapeLayer alloc] init];
layer.frame = self.bounds;
layer.path = bezierPath.CGPath;
layer.fillColor = [UIColor blackColor].CGColor;
// 当前视图也变了
self.layer.mask = layer;
// 有UIView ---> UIImage
UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, [UIScreen mainScreen].scale);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage*image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// 返回
return image;
}
上面的实现很粗超,有很多的地方是没有考虑到的.比如起始点。