如何使用drawRect在UIView中绘制镜像UIImage?

时间:2012-08-22 03:10:35

标签: iphone ios uiview uiimage

我加载图像并以这种方式创建镜像:

 originalImg = [UIImage imageNamed:@"ms06.png"];
 mirrorImg = [UIImage imageWithCGImage:[originalImg CGImage] scale:1.0 orientation:UIImageOrientationUpMirrored];

然后我将上面的UIImage对象设置为UIView的子类,并覆盖drawRect:

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);

    CGAffineTransform t0 = CGContextGetCTM(context);
    CGContextConcatCTM(context, t0);

    CGContextDrawImage(context, self.bounds, [image CGImage]);
    CGContextRestoreGState(context);
}

无论我绘制哪个图像,显示的图像始终是原始图像,设置为UIView子类时,镜像图像从未显示过。 我确信镜像已正确设置为UIView,因为调试信息显示orientation成员变量等于4,这意味着“UIImageOrientationUpMirrored”,而原始图像等于0。 有没有人可以帮我解决这个问题,谢谢。

我还尝试使用setImage在UIImageView中显示镜像图像,并且它可以正常工作。顺便说一下,当我调用UIImageView的setImage时,我发现drawRect中的断点从未被击中,在将图像加载到UIImageView时,我们如何定义绘图行为(例如在图像上方画一条线)?

1 个答案:

答案 0 :(得分:1)

您在UI级别上镜像图像。这将返回一个新的UIImage,但CGImage保持不变。如果你做了一些NSLog,你会注意到这一点。

您还可以在UI级别进行转换。如果你使用这种方法,我建议使用originalImg.scale而不是1.0。然后代码将适用于视网膜和非视网膜显示器。

[UIImage imageWithCGImage:[originalImg CGImage] scale:originalImg.scale orientation:UIImageOrientationUpMirrored];

如果你真的需要镜像CGImage,请查看GitHub上的NYXImagesKit(参见UIImage + Rotating.m)