我加载图像并以这种方式创建镜像:
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时,我们如何定义绘图行为(例如在图像上方画一条线)?
答案 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)