0

私の 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];
4

1 に答える 1