3

UIImagePickerController が常に正方形の画像を返すようにするにはどうすればよいですか? WhatsAppはそれを行いますが、これを達成する方法を見つけていません.

私のアプリでの様子 (iOS 7 でビルド)

ここに画像の説明を入力

どうあるべきか (WhatsApp - iOS 6)

ここに画像の説明を入力

私のコード:

- (IBAction)showImagePicker:(id)sender {
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.allowsEditing = YES;

    if ([sender tag] == 1) {
        imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
    }
    else {
        imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    }

    [self presentModalViewController:imagePicker animated:YES];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    _imageView.image = [info objectForKey:UIImagePickerControllerEditedImage];
    [self dismissModalViewControllerAnimated:YES];
}
4

1 に答える 1

0

UIImageViewキャプチャした画像のサイズを変更するには、IB 内のビューのモードを拡大縮小して塗りつぶすように設定する必要があります。画像がライブラリまたはカメラから選択されると、自動的にサイズが変更されます。ただし、サイズを変更できないため、自動レイアウトをオフにするImageView必要があります。あなたのコードは大丈夫です。とにかく、これをもう少しよく理解するために作成できるサンプル アプリ コードを次に示します。

.h

#import <UIKit/UIKit.h>

@interface ImageTestViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>

@property (strong, nonatomic) IBOutlet UIImageView *imageView;

- (IBAction)takePhoto:  (UIButton *)sender;
- (IBAction)selectPhoto:(UIButton *)sender;

@end

.m

#import "ImageTestController.h"

@interface ImageTestViewController ()

@end

@implementation ImageTestViewController

- (void)viewDidLoad {

    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

        UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:@"Device has no camera"
                                                        delegate:nil
                                                        cancelButtonTitle:@"OK"
                                                        otherButtonTitles: nil];
        [myAlertView show];
    }
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
}

- (IBAction)takePhoto:(UIButton *)sender {
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;

    [self presentViewController:picker animated:YES completion:NULL];
}

- (IBAction)selectPhoto:(UIButton *)sender {
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

    [self presentViewController:picker animated:YES completion:NULL];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
    self.imageView.image = chosenImage;

    [picker dismissViewControllerAnimated:YES completion:NULL];
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    [picker dismissViewControllerAnimated:YES completion:NULL];
}

@end

ImageTestControllerXib またはストーリーボードのビューで、アクションごとに 1 つずつ、2 つのボタンを配置し、必要なリンクを IB に作成します。次に、 a を配置UIImageViewして、ビューで必要なサイズを埋めます。をクリックし、UIImageView属性インスペクタのビュー セクションで、モードをスケール トゥ フィルに変更します。自動レイアウトをオフにします。テストするためだけに、シミュレーターにイメージを追加してみてください。画像が横長サイズであることを確認してください。ビルドして実行し、画像ライブラリから画像を選択すると、正方形または設定したその他のサイズに自動的にサイズ変更されますUIImageView

上記のほとんどの手順を認識していることは承知していますが、問題を解決するためだけでなく、同様の問題を抱えている可能性のある他の人のためにこの回答を書きました。それがあなたを助けることを願っています。

于 2013-08-25T15:21:09.560 に答える