1

私の目標は、次のようにカスタムアニメーションでカスタムセグエを作成することです。セグエが、ナビゲーションコントローラーのプッシュ効果と同様の効果を持つdestinationViewControllerからのボタンで、sourceViewControllerからのボタンをカバーするようにします。古いボタンを右から左に押します。

(sourceViewControllerからの)古いボタンを必要に応じて移動させることができました。

[UIView animateWithDuration:1.0 animations:^{
        // set the target frame for animated view
        sourceViewController.optionsButton.frame = leftButtonTargetFrame;
    } completion:^(BOOL finished) {
        [navigationController pushViewController:destinationViewController animated:NO];
        // reset the button's frame back to its original frame
        sourceViewController.optionsButton.frame = leftButtonInitFrame;
}];

しかし、(destinationViewControllerからの)新しいボタンを移動させるのに苦労しています。理由は、destinationViewControllerのビュー要素にアクセスできないためです。セグエを実行している間、それらはインスタンス化されません。また、インスタンス化されていないボタンをアニメーション化することはできません。

では、sourceViewControllerのボタンをdestinationViewControllerのボタンに置​​き換えるにはどうすればよいですか?

4

2 に答える 2

0

まだ存在していないオブジェクトをアニメートすることはできません。しかし、あなたはそれを偽造することができます。

  1. 新しいViewControllerにあるボタンと同じように見えるプレースホルダーボタンを作成します。
  2. 正しい場所にアニメーション化します。
  3. デスティネーションビューコントローラが入ると、そのボタンは非表示になります。
  4. ビューコントローラが配置された後(つまり、セグエが終了した後)、宛先のビューコントローラは、ボタンが適切に配置されていることを確認し、実際のボタンを表示できます。

お役に立てれば。

于 2013-03-09T14:20:19.583 に答える
0

ボタンにアクセスしようとした時点で、宛先View Controllerのビューが初期化/ロードされていません。宛先ビュー コントローラーのビューを読み込むには、ビュー プロパティにアクセスするだけです。ボタンを使用する前に、次のことを行ってください。[destinationViewController view];

destinationViewController.view;も機能しますが、コンパイラの警告が生成されます。

背景情報:

ビュープロパティにアクセスし、その値が現在 nil の場合、ビュー コントローラーは自動的に loadView メソッドを呼び出し、結果のビューを返します。

メソッドloadViewは、コントローラーが管理するビューをロードします。このメソッドを直接呼び出さないでください。

于 2013-03-11T10:47:45.700 に答える