1

我正在尝试缩放和翻译屏幕上的图像。

这是我的drawRect:

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    CGContextSetShouldAntialias(context, NO);
    CGContextScaleCTM (context, senderScale, senderScale);
    [self.image drawAtPoint:CGPointMake(imgposx, imgposy)];
    CGContextRestoreGState(context);
}

senderScale为 1.0 时,移动图像 ( imgposx/imgposy) 非常平滑。但是,如果 senderScale 有任何其他值,则性能会受到很大影响,并且当我移动它时图像会卡顿。

我正在绘制的图像是一个UIImage对象。我用

UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0.0);

并画一个简单的UIBezierPath(stroke)

self.image = UIGraphicsGetImageFromCurrentImageContext();  

难道我做错了什么?关闭抗锯齿并没有太大改善。

编辑:我试过这个:

rectImage = CGRectMake(0, 0, self.frame.size.width * senderScale, self.frame.size.height * senderScale);
[image drawInRect:rectImage];

但它和其他方法一样慢。

4

1 回答 1

1

如果你想让它表现良好,你应该让 GPU 使用 CoreAnimation 来完成繁重的工作,而不是在你的-drawRect:方法中绘制图像。尝试创建一个视图并执行以下操作:

myView.layer.contents = self.image.CGImage;

然后通过相对于其父视图操作 UIView 来缩放和翻译它。如果您在其中绘制图像,-drawRect:那么您正在使它为每一帧的图像进行blitting 的艰苦工作。通过 CoreAnimation 只进行一次 blits,然后让 GPU 缩放和平移图层。

于 2013-07-19T19:07:16.433 回答