Rotate image in UIImageView

后端 未结 5 1951
不思量自难忘°
不思量自难忘° 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:05

    If you need to rotate/flip an image for localization purposes you can use the following: imageView.image = imageView.image?.imageFlippedForRightToLeftLayoutDirection()

    0 讨论(0)
  • 2021-02-06 08:06

    The following code works fine with Swift:

    let img = UIImage(CGImage: self.imageView.image!.CGImage, scale: 1.0, orientation: UIImageOrientation.Right)
    self.imageView.image = img
    self.imageView.setNeedsLayout()
    
    0 讨论(0)
  • 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;
    }
    
    0 讨论(0)
  • 2021-02-06 08:17

    Please try this, it works for me:

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    [UIView setAnimationRepeatCount:10];
    myImgView.transform = CGAffineTransformMakeRotation(M_PI);
    [UIView commitAnimations];
    

    Good luck!

    0 讨论(0)
  • 2021-02-06 08:24

    Take a look at rotating the ImageView's layer. You will need to import the QuartzCore library to make that accessible.

    myImageView.layer.transform = CGAffineTransformMakeRotation (1.5);
    
    0 讨论(0)
提交回复
热议问题