49

私がやりたいことは、カメラからスナップショットを取得し、それをサーバーに送信してから、サーバーがビューコントローラーで画像を送り返すことです。画像が縦向きモードの場合、画像は画面によく表示されますが、画像が横向きモードで撮影された場合、画像は画面上で引き伸ばされて表示されます (縦向きモードで表示しようとするため!)。これを修正する方法はわかりませんが、最初に画像が縦向き/横向きモードかどうかを確認し、横向きモードの場合は画面に表示する前に 90 度回転させることが 1 つの解決策だと思います。では、どうすればそれを行うことができますか?

4

14 に答える 14

128
self.imageview.transform = CGAffineTransformMakeRotation(M_PI_2);

Swift 4+:

self.imageview.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi/2))
于 2012-07-26T10:45:15.780 に答える
30

これは、画像を任意の角度に回転させるための完全なコードです。適切なファイルに追加するだけです。つまり、以下のように、画像処理を使用する.m

@interface UIImage (RotationMethods)
- (UIImage *)imageRotatedByDegrees:(CGFloat)degrees;
@end

@implementation UIImage (RotationMethods)

static CGFloat DegreesToRadians(CGFloat degrees) {return degrees * M_PI / 180;};

- (UIImage *)imageRotatedByDegrees:(CGFloat)degrees 
{   
    // calculate the size of the rotated view's containing box for our drawing space
    UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.size.width, self.size.height)];
    CGAffineTransform t = CGAffineTransformMakeRotation(DegreesToRadians(degrees));
    rotatedViewBox.transform = t;
    CGSize rotatedSize = rotatedViewBox.frame.size;

    // Create the bitmap context
    UIGraphicsBeginImageContext(rotatedSize);
    CGContextRef bitmap = UIGraphicsGetCurrentContext();

    // Move the origin to the middle of the image so we will rotate and scale around the center.
    CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);

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

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

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

}

@end

これは、Apple のSquareCamの例からのコード スニペットです。

上記のメソッドを呼び出すには、以下のコードを使用してください

UIImage *rotatedSquareImage = [square imageRotatedByDegrees:rotationDegrees];

ここで正方形は 1UIImageで、rotationDegreesは 1 つのfloteivar で画像を回転させます。

于 2012-07-26T10:59:10.193 に答える
21

Swift 3 と Swift 4 は代わりに .pi を使用します

例えば:

//rotate 90 degrees
myImageView.transform = CGAffineTransform(rotationAngle: .pi / 2)

//rotate 180 degrees
myImageView.transform = CGAffineTransform(rotationAngle: .pi)

//rotate 270 degrees
myImageView.transform = CGAffineTransform(rotationAngle: .pi * 1.5)
于 2017-04-13T20:19:15.923 に答える
14
- (UIImage *)rotateImage:(UIImage*)image byDegree:(CGFloat)degrees 
{   
    UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,image.size.width, image.size.height)];
    CGAffineTransform t = CGAffineTransformMakeRotation(DegreesToRadians(degrees));
    rotatedViewBox.transform = t;
    CGSize rotatedSize = rotatedViewBox.frame.size;
    [rotatedViewBox release];

    UIGraphicsBeginImageContext(rotatedSize);
    CGContextRef bitmap = UIGraphicsGetCurrentContext();


    CGContextTranslateCTM(bitmap, rotatedSize.width, rotatedSize.height);

    CGContextRotateCTM(bitmap, DegreesToRadians(degrees));


    CGContextScaleCTM(bitmap, 1.0, -1.0);
    CGContextDrawImage(bitmap, CGRectMake(-image.size.width, -image.size.height, image.size.width, image.size.height), [image CGImage]);

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

}
于 2012-07-26T10:44:10.090 に答える
8

このコードを画像に追加するだけです。

Image.transform=CGAffineTransformMakeRotation(M_PI / 2);
于 2012-07-26T10:46:35.147 に答える
6

XCode 6.3 Swift 1.2 でこれをしようとするとエラーが発生しました

self.imageview.transform = CGAffineTransformMakeRotation(M_PI_2);

型キャストの修正を強制するには、これを試す必要があります。

self.imageview.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2));

Swift 4編集

imageview.transform = CGAffineTransform(rotationAngle: .pi)
于 2015-05-19T21:32:53.397 に答える
0

The iOSDev answer (UIImage extension) の Swift 2.2 バージョンは次のとおりです。

func degreesToRadians(degrees: CGFloat) -> CGFloat {
    return degrees * CGFloat(M_PI) / 180
}

func imageRotatedByDegrees(degrees: CGFloat) -> UIImage {
    // calculate the size of the rotated view's containing box for our drawing space
    let rotatedViewBox = UIView(frame: CGRectMake(0,0,self.size.width, self.size.height))
    let t = CGAffineTransformMakeRotation(self.degreesToRadians(degrees))
    rotatedViewBox.transform = t
    let rotatedSize = rotatedViewBox.frame.size

    // Create the bitmap context
    UIGraphicsBeginImageContext(rotatedSize)
    let bitmap = UIGraphicsGetCurrentContext()

    // Move the origin to the middle of the image so we will rotate and scale around the center.
    CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);

    // Now, draw the rotated/scaled image into the context
    CGContextScaleCTM(bitmap, 1.0, -1.0);
    CGContextDrawImage(bitmap, CGRectMake(-self.size.width / 2, -self.size.height / 2, self.size.width, self.size.height), self.CGImage);

    let newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;

}
于 2016-06-21T15:14:36.007 に答える