主要思路:利用Quarts 2D对图片进行重新绘制。暂未考虑性能优化。
核心方法:
- (void)drawCornerImage
{
/**
* 利用BeezierPath绘制圆角图片区域
*
* 参数一: 图片位置大小范围
* 参数二: 圆角位置
* 参数三: 圆角半径
*/
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.bounds
byRoundingCorners:self.corners
cornerRadii:CGSizeMake(self.cornerRadiu, self.cornerRadiu)];
// 因为这里是从边上裁剪的,所以设置的边框宽度要成2,因为会截去一半边框。
path.lineWidth = self.borderWidth * 2;
// 如果有边框,才设置颜色
if (self.borderWidth != 0) {
[self.borderColor setStroke];
}
// 截取上下文区域
[path addClip];
UIImage *image = [UIImage imageNamed:self.imgName];
[image drawInRect:CGRectMake(self.borderWidth * 0.5, self.borderWidth * 0.5, path.bounds.size.width - self.borderWidth, path.bounds.size.height - self.borderWidth)];
// 先重绘图片,最后渲染边框,否则图片会覆盖边框
[path stroke];
}