Повернуть изображение в UIImageView - PullRequest
7 голосов
/ 25 августа 2011

Можно ли повернуть только изображение в UIImageView?Я ищу информацию об этом, но я только нашел информацию, как повернуть UIImageVeiw.

Ответы [ 5 ]

15 голосов
/ 25 августа 2011

Вы можете повернуть изображение с помощью следующего кода.Обратите внимание, что здесь используется CGImageRef, который вы можете получить из UIImage через

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

После того, как вы получите повернутое изображение, вы можете установить для изображения ImageView ваше новое повернутое изображение, например:

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

вот метод, который будет вращать 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;
}
6 голосов
/ 25 августа 2011

Посмотрите на вращение слоя ImageView. Вам нужно будет импортировать библиотеку QuartzCore, чтобы сделать ее доступной.

myImageView.layer.transform = CGAffineTransformMakeRotation (1.5);
5 голосов
/ 16 апреля 2012

Пожалуйста, попробуйте это, у меня это работает:

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

Удачи!

2 голосов
/ 22 июля 2015

Следующий код отлично работает с Swift:

let img = UIImage(CGImage: self.imageView.image!.CGImage, scale: 1.0, orientation: UIImageOrientation.Right)
self.imageView.image = img
self.imageView.setNeedsLayout()
0 голосов
/ 29 июня 2016

Если вам нужно повернуть / перевернуть изображение для локализации, вы можете использовать следующее: imageView.image = imageView.image?.imageFlippedForRightToLeftLayoutDirection()

...