我正在自定义UIView
上绘制图片。在调整视图大小时,绘图性能会下降并开始滞后。
我的图片绘制代码如下:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
UIBezierPath *bpath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, width, height)];
CGContextAddPath(context, bpath.CGPath);
CGContextClip(context);
CGContextDrawImage(context, [self bounds], image.CGImage);
}
这种做法是否正确?
答案 0 :(得分:2)
你最好使用Instruments查找瓶颈所在而不是在这里询问。
但是,您可能会发现,每次帧稍微改变时,整个视图都会重新绘制。
如果您只是使用drawRect
将视图剪切为椭圆形(我猜它背后有图像或其他内容)那么您最好使用CAShapeLayer
。
创建CAShapeLayer
并为其指定CGPath
,然后将其作为剪裁图层添加到view.layer
。
然后您可以更改CAShapeLayer
上的路径,它会更新。你会发现(我认为)它的表现也好得多。
答案 1 :(得分:0)
如果你的身高和宽度相同,你可以使用UIImageView而不需要自定义视图,并通过在图像视图的图层上设置属性来获得圆形剪裁。这种方法很快就很好。
只需设置一个UIImageView(在我的例子中称为"图像"然后让你的视图控制器执行一次:
image.layer.cornerRadius = image.size.width / 2.0;
image.layer.masksToBounds = YES;