3

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

 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,因为调试信息显示方向成员变量等于 4,这意味着“UIImageOrientationUpMirrored”,而原始图像等于 0。有没有人可以帮我解决这个问题, 谢谢。

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

4

1 回答 1

1

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

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

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

如果您确实需要镜像 CGImage,请查看 GitHub 上的 NYXImagesKit(请参阅 UIImage+Rotating.m)

于 2013-02-06T08:38:25.477 回答