旋转UIImageView数据 -

时间:2014-04-11 06:13:09

标签: ios objective-c uiimageview rotation

您好,在我的iOS应用程序中,我希望以90度旋转UIImage数据。

我使用下面的代码进行180度旋转 - 它工作正常。

- (UIImage*)upsideDownBunny:(UIImage *)img {

    CGSize imgSize = [img size];
    UIGraphicsBeginImageContext(imgSize);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextRotateCTM(context,  M_PI);
    CGContextTranslateCTM(context, -imgSize.width, -imgSize.height);
    [img drawInRect:CGRectMake(0, 0, imgSize.width, imgSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}

但是当我尝试旋转90度时它无法正常工作 - 请纠正我

- (UIImage *)upsideDownBunny:(UIImage *)img {

    CGSize imgSize = [img size];
    UIGraphicsBeginImageContext(imgSize);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextRotateCTM(context,  M_PI_2);
    CGContextTranslateCTM(context, -imgSize.width, -imgSize.height);
    [img drawInRect:CGRectMake(0, 0, imgSize.width, imgSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}

2 个答案:

答案 0 :(得分:1)

试试这个......

UIImage * LandscapeImage = [UIImage imageNamed: imgname];
UIImage * PortraitImage = [[UIImage alloc] initWithCGImage: LandscapeImage.CGImage
                                                 scale: 1.0
                                           orientation: UIImageOrientationLeft];

希望这可以帮到你!

答案 1 :(得分:0)

试试这个

- (UIImage *)upsideDownBunny:(UIImage *)image {

    // Rotate in degrees
    CGFloat degrees = M_PI_2;

    // Calculate the size of the rotated view's containing box for our drawing space
    UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
    CGAffineTransform transform = CGAffineTransformMakeRotation(degrees);
    rotatedViewBox.transform = transform;
    CGSize rotatedSize = rotatedViewBox.frame.size;

    // Create image context
    UIGraphicsBeginImageContext(rotatedSize);
    CGContextRef context = UIGraphicsGetCurrentContext();

    // Move the origin to the middle of the image.
    CGContextTranslateCTM(context, rotatedSize.width * 0.5f, rotatedSize.height * 0.5f);

    // Rotate the image context
    CGContextRotateCTM(context, degrees);

    // Now, draw the rotated/scaled image into the context
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextDrawImage(context, CGRectMake(-image.size.width * 0.5f, -image.size.height * 0.5f, image.size.width, image.size.height), [image CGImage]);

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}

问题是你的上下文在左上角(0,0)左右旋转,旋转90度后它将超出范围。因此,您需要将上下文的原点移动到中间。