为什么imageWithCGImage:scale:orientation:不起作用?

时间:2013-06-26 03:28:28

标签: ios image cgimage

这是我的问题:

当我得到它应该旋转的度数时,我想旋转我的图像。

我的代码在这里

UIImage *image = imageView.image;
UIImage *originalImage = imageView.image;
CGAffineTransform transform = imageView.transform;

        if (CGAffineTransformEqualToTransform(transform, CGAffineTransformRotate(CGAffineTransformIdentity, M_PI_2))) {
            image = [UIImage imageWithCGImage:originalImage.CGImage scale:originalImage.scale orientation:UIImageOrientationRight];
        } else if (CGAffineTransformEqualToTransform(transform, CGAffineTransformRotate(CGAffineTransformIdentity, M_PI))) {
            image = [UIImage imageWithCGImage:originalImage.CGImage scale:originalImage.scale orientation:UIImageOrientationDown];
        } else if (CGAffineTransformEqualToTransform(transform, CGAffineTransformRotate(CGAffineTransformIdentity, M_PI_2 * 3))) {
            image = [UIImage imageWithCGImage:originalImage.CGImage scale:originalImage.scale orientation:UIImageOrientationLeft];
        } else if (CGAffineTransformEqualToTransform(transform, CGAffineTransformRotate(CGAffineTransformIdentity, M_PI * 2))) {
            image = originalImage; // UIImageOrientationUp
        }

正如我所希望的那样,image将显示为已旋转。但旋转后,这个图像仍然是它的样子。这意味着方法imageWithCGImage:scale:orientation:不起作用。

有人可以告诉我为什么?感谢。

3 个答案:

答案 0 :(得分:1)

您使用

UIImage *image = imageView.image;

获取imageView.image的句柄,并为(UIImage *)图像设置更改后的图像,这只是imageView.image的引用。如果你想要更改imageView.image,你应该设置再次使用imageView.image进行更改

在您的代码后面添加此内容

imageView.image = image;

答案 1 :(得分:1)

这是您需要从根本上理解的东西。当您获得指向另一个对象的指针,然后将该指针设置为其他对象时,它不会影响原始对象。想一想:

Lunch *myLunch = myFriend.CurrentLunch;

这意味着你的午餐是朋友的午餐。

myLunch = new MisoRamen();

现在你的午餐是另一个午餐。

myLunch.InsertWeirdSauce();

你刚刚在自己的午餐中加入酱汁,而你朋友的午餐仍然安全。如果你想改变你朋友的午餐,你必须这样做。

Lunch *newLunch = new MisoRamen();
newLunch.InsertWeirdSauce();
myFriend.CurrentLunch = newLunch;

现在,你的朋友吃了一顿带有奇怪酱汁的午餐时会感到震惊。

答案 2 :(得分:0)

您需要再次设置图像(在所有代码之后)

imageView.image = image;