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