2011-08-25 24 views
7

UIImageViewで画像のみを回転することはできますか?私はそれについての情報を探していますが、UIImageVeiwを回転させる方法についての情報しか見つかりませんでした。UIImageViewで画像を回転する

答えて

15

画像を次のコードで回転できます。ここ

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

:注は、これはあなたが回転した画像を取得したら、あなたはこのようなあなたの新しい回転した画像にImageViewのの画像を設定することができます

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

を経由してUIImageから取得することができますCGImageRefを使用しています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

感謝を使用していました君は。それはまさに私が欲しいものです。 – murzynpl

+1

私が最近したように誰かが予期せぬ結果に直面するかもしれません - 最終的なイメージは元のサイズを失い、コーナーを切り取っていました。だから私はslighlty正しい結果を得るために関数を変更しました。誰かが私の解決策を知りたいのであれば、http://stackoverflow.com/questions/19219855/uiimageview-get-transformed-uiimage/19221081#19221081 – heximal

+0

回転イメージのサイズは、先にコメントしたように変更されます。上記のコードには小さなバグがあります。 CGContextTranslateCTMとCGContextDrawImageの最後の呼び出しでは、roundedRect.size.widthとrounded.size.heightではなく元の幅と高さを使用する必要があります。一度これを行うと、上のコードは完全に動作します。理由 - 回転された矩形を含むctxtが作成され、原点が中心に移動し、元の画像の向きと一致するように逆回転します。この時点で元の画像の座標系に戻す必要があります。 – matangs

6

ImageViewのレイヤーを回転させてみてください。 QuartzCoreライブラリをインポートしてアクセス可能にする必要があります。

myImageView.layer.transform = CGAffineTransformMakeRotation (1.5); 
+1

は 'setAffineTransform' – fabian789

5

それは私の作品、これを試してください:

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

幸運!

1

次のコードスウィフトと正常に動作します:

let img = UIImage(CGImage: self.imageView.image!.CGImage, scale: 1.0, orientation: UIImageOrientation.Right) 
self.imageView.image = img 
self.imageView.setNeedsLayout() 
0

あなたは以下を使用することができますローカライズのために画像を反転/回転させる必要がある場合: imageView.image = imageView.image?.imageFlippedForRightToLeftLayoutDirection()