8

クリックするとカメラが表示されるボタンがあります(完全に機能します)

- (IBAction)getPhoto:(id)sender
{
    NSLog( @"Button clicked!" );
    imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
    }

    else {  // IF the device doesn't have a camera, so use the photos album
        [imagePicker setSourceType:UIImagePickerControllerSourceTypeSavedPhotosAlbum];
    }

    [self addSubview:imagePicker.view];
}

その後、画像などを撮ることができます-しかし、「使用」をクリックすると:何も起こりませんここでは私の方法です:画像ピッカーはそれ自体を却下しません:アプリケーションは単に何もしません、私はちょうど画像を撮ろうとしています画面上の CGRect 内に取得して表示します。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [picker dismissViewControllerAnimated:YES completion:NULL];

    UIImageView *patientImage = [[UIImageView alloc] init];
    patientImage.frame = CGRectMake(625, 25, 83, 103);

    UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
    self.patientImage.image = chosenImage;
}

画像を撮らずにキャンセルボタンを押してもimagePicker(カメラインターフェース)が消えない

ヘルプ、アドバイス、またはガイダンスをいただければ幸いです。

4

6 に答える 6

5

ピッカーをサブビューとして追加する代わりに、ピッカーをUIPopoverController.

次に、次のように popover メソッドUIViewを使用して、サブクラス内から表示できます。presentPopoverFromRect:inView:permittedArrowDirections:animated:

self.popover = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
[self.popover presentPopoverFromRect:sender.frame inView:self permittedArrowDirections: UIPopoverArrowDirectionAny animated:YES];

次に、デリゲート メソッドを使用して、次を使用してポップオーバーを閉じることができます。

[self.popover dismissPopoverAnimatedYES];

は、公式ドキュメントで必要とされています:

この表は、iPad で ソース タイプUIImagePickerControllerSourceTypePhotoLibraryまたは を指定する場合UIImagePickerControllerSourceTypeSavedPhotosAlbum、UIPopoverController クラス リファレンスの「ポップオーバーの表示と非表示」で説明されているように、ポップオーバー コントローラーを使用してイメージ ピッカーを表示する必要があることを示しています。保存された写真や動画を選択するためにイメージ ピッカーをモ​​ーダル (フルスクリーン) で表示しようとすると、システムは例外を発生させます。

iPad では、ソース タイプを に指定すると UIImagePickerControllerSourceTypeCamera、イメージ ピッカーをモ​​ーダル (フルスクリーン) またはポップオーバーを使用して表示できます。ただし、Apple では、カメラ インターフェイスのみをフルスクリーンで表示することをお勧めします。

于 2013-06-28T01:28:06.697 に答える
5

addSubview「 」のことをするべきではありませんが、代わりに次のことを行います。

[self presentViewController:imagePicker animated:YES completion:nil];
于 2013-06-21T09:57:38.980 に答える
4

getPhoto:メソッドはサブクラスUIViewにありますか?

その場合は、次のようにすることをお勧めします。

  1. getPhoto:コードをサブクラスから完全に移動UIViewし、ビューの親ビュー コントローラーに配置します。

  2. UIViewUIButtonのプロパティを作成します。@property (nonatomic, strong) UIButton *myButton;

  3. ビュー コントローラーで、ボタンのターゲットとアクションを次のように設定します。

    [myView.myButton addTarget:self action:@selector(getPhoto:) forControlEvents:UIControlEventTouchUpInside];
    
  4. 最後に、getPhoto:メソッドで呼び出します[self presentViewController:imagePicker animated:YES completion:NULL];

  5. - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)infoコードもView Controllerに入れ、次のように変更する必要がありself.patientImage.image = chosenImage;ますmyView.patientImage.image = chosenImage;

于 2013-06-23T23:10:41.550 に答える
1

試す:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [picker.view removeFromSuperview];

    UIImageView *patientImage = [[UIImageView alloc] init];
    patientImage.frame = CGRectMake(625, 25, 83, 103);

    UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
    self.patientImage.image = chosenImage;
}
于 2013-06-28T01:09:28.517 に答える
1

キャンセルボタンが機能しない理由がわかりません。ただし、この変更を行うと、クリックしている画像が選択されます。

キャンセル イベントが必要な場合は、カスタムUIBarButtonを作成して追加します。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

UIImageView *patientImage = [[UIImageView alloc] init];
patientImage.frame = CGRectMake(625, 25, 83, 103);

UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
self.patientImage.image = chosenImage;

[imagePicker.view removeFromSuperview];

}
于 2013-06-24T07:50:10.020 に答える
-1

[self.addSubView:imagePicker.view];代わりに and を削除します

[self presentViewController:imagePicker animated:YES completion:NULL];

未定義ですpickerが、変数を却下しています。picker代わりに:

[self dismissModalViewControllerAnimated:YES completion:NULL]; メソッドの最後にあることを確認してください。

于 2013-06-21T09:59:20.570 に答える