2

私は xcode 4.5.2 を使用しており、カメラ ボタン用に独自の OverlayViewController を作成しました。

ここで、デリゲート コントローラー - TakePhotoViewController が OverlayViewController から didFinishWithCamera アクションを取得するときに、ユーザーを AdjustPhotoViewController に転送したいと思います。

ただし、次の警告が表示され、転送されていません。

警告: プレゼンテーションの進行中にプレゼンテーションを試みてください!

- (void)didFinishWithCamera
{
    [[self.overlayViewController.imagePickerController presentingViewController] dismissViewControllerAnimated:YES completion:nil];
    [self performSegueWithIdentifier:@"fromTakeToAdjust" sender:self];    
}
4

5 に答える 5

2

実際、私の経験では、これは同じボタンからセグエと IBAction (セグエを呼び出す) を呼び出すことに関係しています。Interface Builder の接続インスペクターをチェックして、ボタンが両方に接続されているかどうかを確認してください。

ストーリーボードでは、次のようになります。

ここに画像の説明を入力

コードでは、次のようになります。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([segue.identifier isEqualToString:@"pushToNewVC"]) {
        UIViewController *controller = (UIViewController *)segue.destinationViewController;
    }
}

=

- (IBAction)launchNew VC:(id)sender {
    [self performSegueWithIdentifier:@"pushToNewVC" sender:sender];
}
于 2013-08-31T22:29:24.453 に答える
1

問題は、TakePhotoViewControllerで、私が持っていたということでした:

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

これにより、イメージピッカーが開き、同時に閉じようとしました。

確認するフラグを追加しました。

于 2012-12-16T13:17:05.923 に答える
1

これを試して、古いトランジションが終了し、新しいトランジションが来るまでの時間を与えることができます

通常は0.3動作しますが、必要に応じて調整してください

- (void)didFinishWithCamera
{
    [[self.overlayViewController.imagePickerController presentingViewController] dismissViewControllerAnimated:YES completion:nil];
    [self performSelector:@selector(showModel) withObject:nil afterDelay:0.3];
}

- (void)showModel {
    [self performSegueWithIdentifier:@"fromTakeToAdjust" sender:self];
}
于 2012-12-16T08:19:50.690 に答える
1

オーバーレイ ビュー コントローラーには次のコードを使用してください。

コードで確認してください。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    [self.window addSubview:self.view];
    [self.window makeKeyAndVisible];

    return YES;
}

コード使用後のviewdidloadイベントで

- (void) viewDidLoad {
    self.picker = [[UIImagePickerController alloc] init];
    self.picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    self.picker.cameraDevice = UIImagePickerControllerCameraDeviceFront;

    self.picker.showsCameraControls = NO;
    self.picker.wantsFullScreenLayout = YES;

    // Insert the overlay
    self.overlay = [[Customview alloc] initWithNibName:@"Customview" bundle:nil];
    self.overlay.pickerRef = self.picker;
    self.picker.cameraOverlayView = self.overlay.view;

    [self presentModalViewController:self.picker animated:NO];
}

ビューで .h メソッドに続くコードの使用

   @interface CameraController : UIViewController {
        UIImagePickerController* __picker;
        Customview* __overlay;
    }

@property (nonatomic, retain) UIImagePickerController* picker;
@property (nonatomic, retain) Customview* overlay;

上記のコードがあなたに役立つことを願っています。

于 2012-12-16T08:21:02.417 に答える
1

Odelya さん、完了ブロックで何らかのアニメーション (この cae コントローラーの却下) の後に実行されることを意図した UI を使用して、すべてのアクションを実行する必要があります。実際には、これらの目的のために作成されています。次のようにコードを編集します。

- (void)didFinishWithCamera
{
    if(![[self.overlayViewController.imagePickerController presentingViewController] isBeingDismissed]) {
        [[self.overlayViewController.imagePickerController presentingViewController] dismissViewControllerAnimated:YES completion:^ {
            [self performSegueWithIdentifier:@"fromTakeToAdjust" sender:self];
        }];
    }   
}

編集: if ステートメントを追加しました。今すぐ試してください。

于 2012-12-16T09:51:34.367 に答える