Rotate image in UIImageView

后端 未结 5 1950
不思量自难忘°
不思量自难忘° 2021-02-06 07:25

Is it possible to rotate only image in UIImageView? I\'m looking for information about it, but i only found information how rotate UIImageVeiw.

5条回答
  •  醉梦人生
    2021-02-06 08:14

    You can rotate the image with the following code. Note, this uses a CGImageRef which you can get from a UIImage via

    CGImageRef imageRef = [self CGImageRotatedByAngle:[image CGImage] angle:30];
    

    Once you get the rotated image, you can set the ImageView's image to your new rotated image like this:

    UIImage* img = [UIImage imageWithCGImage: imageRef];
    myImageView.image = img;
    

    here is a method that will rotate the imageRef:

    - (CGImageRef)CGImageRotatedByAngle:(CGImageRef)imgRef angle:(CGFloat)angle
    {
    
        CGFloat angleInRadians = angle * (M_PI / 180);
        CGFloat width = CGImageGetWidth(imgRef);
        CGFloat height = CGImageGetHeight(imgRef);
    
        CGRect imgRect = CGRectMake(0, 0, width, height);
        CGAffineTransform transform = CGAffineTransformMakeRotation(angleInRadians);
        CGRect rotatedRect = CGRectApplyAffineTransform(imgRect, transform);
    
        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    
        CGContextRef bmContext = CGBitmapContextCreate(NULL,
                                                       rotatedRect.size.width,
                                                       rotatedRect.size.height,
                                                       8,
                                                       0,
                                                       colorSpace,
                                                       kCGImageAlphaPremultipliedFirst);
        CGContextSetAllowsAntialiasing(bmContext, YES);
        CGContextSetShouldAntialias(bmContext, YES);
        CGContextSetInterpolationQuality(bmContext, kCGInterpolationHigh);
        CGColorSpaceRelease(colorSpace);
        CGContextTranslateCTM(bmContext,
                              +(rotatedRect.size.width/2),
                              +(rotatedRect.size.height/2));
        CGContextRotateCTM(bmContext, angleInRadians);
        CGContextTranslateCTM(bmContext,
                              -(rotatedRect.size.width/2),
                              -(rotatedRect.size.height/2));
        CGContextDrawImage(bmContext, CGRectMake(0, 0,
                                                 rotatedRect.size.width,
                                                 rotatedRect.size.height),
                           imgRef);
    
    
    
        CGImageRef rotatedImage = CGBitmapContextCreateImage(bmContext);
        CFRelease(bmContext);
        [(id)rotatedImage autorelease];
    
        return rotatedImage;
    }
    

提交回复
热议问题