如何提高渲染图像的性能?

时间:2014-09-08 12:21:06

标签: ios uiimage core-graphics

我正在自定义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);
}

这种做法是否正确?

2 个答案:

答案 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;