私の iOS アプリは、インターネットからいくつかの画像をダウンロードし、それらを画面に表示します (iPhone 縦向きレイアウト)。これらの画像の中には、高さよりも幅の方が大きいものもあり、その場合、画像を画面に表示すると、画像が押しつぶされたように見えます (ワイドスクリーン テレビの画像が iPhone の幅に縮小されていることを想像してください)。私がやりたいことは、画像の幅が画像の高さよりも広いたびに、画像を時計回りに 90 度回転させて (ランドスケープ レイアウト モードに)、アプリのドキュメント フォルダーに保存してから提示することです。画面上 - この方法では、ワイドスクリーン TV (例) の画像が 90 度回転して表示されますが、画像の縦横比が完全に破壊されるわけではありません。
さまざまな複雑な理由により、アプリの横向きレイアウトを使用できません。他の副作用が多すぎます。これは私が書いたコードです:
UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]]];
CGFloat width = image.size.width;
CGFloat height = image.size.height;
if(width > 1.2*height) {
NSLog(@"rotate the image");
CGImageRef imageRef = [image CGImage];
image = [UIImage imageWithCGImage:imageRef scale:1.0 orientation:UIImageOrientationLeft];
}
次に、画像をアプリのドキュメント フォルダーに保存します。次に、ドキュメント フォルダーに保存されている画像ファイルを読み取り、この画像を開く新しい UIViewController が開きます。問題は、画像がまったく回転していないように見えることです。回転せずに、元の画像と同じように表示されます。コンソールに NSLog の「画像を回転させる」が表示されるため、上記のコードが本来の処理を実行しようとしていることはわかっています。しかし、どういうわけか、この画像は回転した画像として保存されません。
では、この問題にどのようにアプローチすればよいでしょうか。
編集:私の画像を保存するコード:
NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
// Create image name
NSString *path = [@"" stringByAppendingFormat:@"%@%@", @"image", @".png"];
// Create full image path
path = [documentsDirectory stringByAppendingPathComponent:path];
path = [NSString stringWithFormat:@"%@", path];
// Write image to image path
NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(image)];
[data1 writeToFile:path atomically:YES];