如何正确旋转图像?

时间:2017-04-27 17:09:40

标签: ios objective-c uiimageview uiimage

这种方法有什么问题?问题是旋转后的图像有透明框。我怎么能摆脱它?

@implementation UIImage (RotationMethods)

static CGFloat getRadianFromDegree(CGFloat degrees)
{return degrees * M_PI / 180;};

- (UIImage *) rotateImageByDegree:(CGFloat)degrees
{
    UIView *rotatedImageView = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.size.width, self.size.height)];
    CGAffineTransform t = CGAffineTransformMakeRotation(getRadianFromDegree(degrees));
    rotatedImageView.transform = t;
    CGSize rotatedSize = rotatedImageView.frame.size;
    UIGraphicsBeginImageContextWithOptions(rotatedSize, YES, self.scale);
    CGContextRef bitmap = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);
    CGContextRotateCTM(bitmap, getRadianFromDegree(degrees));
    CGContextScaleCTM(bitmap, 1.0, -1.0);
    CGContextDrawImage(bitmap, CGRectMake(-self.size.width / 2, -self.size.height / 2, self.size.width, self.size.height), [self CGImage]);
    UIImage *rotatedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return rotatedImage;

}

@end

EDIT1
enter image description here

EDIT2 以下是旋转动作的代码:

- (IBAction)rotateAction:(id)sender {
    self.imageView.image = [self.imageView.image rotateImageByDegree:22];
}

1 个答案:

答案 0 :(得分:1)

问题是由您未向我们展示的代码引起的。

我怎么知道?我运行了您的代码,所做的代码显示 - 并且旋转的图像和图像边界之间存在间隙:

enter image description here

在该屏幕截图中,主视图背景为红色,我故意将图像视图背景设置为白色,以便您可以看到旋转的小猫图片的角落与包含的图像边缘相交。

如果我们将图像视图背景设置为清除,则白色消失,我们会在红色背景上看到旋转的小猫。

enter image description here

因此,我们可以得出结论:"收缩"你抱怨的是正在做的事情,你在问题中没有 的事情。