当前屏幕渲染绘制相对离屏渲染,GPU直接在当前显示的屏幕缓冲区中进行图形渲染,不需要提前另开缓冲区,也不需要缓冲区的切换,所以性能较高。
-(UIImage*)imageWithCornerRadius:(CGFloat)radius ofSize:(CGSize)size{
//当前UIImage的可见绘制区域
CGRect rect = (CGRect){0.f,0.f,size};
//创建基于位图的上下文
UIGraphicsBeginImageContextWithOptions(size, NO, UIScreen.mainScreen.scale);
//在当前位图上下文添加圆角绘制路径
CGContextAddPath(UIGraphicsGetCurrentContext(), [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:radius].CGPath);
//当前绘制路径和原绘制路径相交得到最终裁剪绘制路径
CGContextClip(UIGraphicsGetCurrentContext());
//绘制
[self drawInRect:rect];
UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
//关闭当前位图上下文
UIGraphicsEndImageContext();
return image;
}