2009-07-28 24 views
2

私のアプリケーションにはページ付きスクロールビューがあります。スクロールビューの各ページには、ボタンのグリッドを表示するView Controller(buttonViewController)のインスタンスがあります。ユーザーがボタンの1つをクリックすると、buttonViewControllerはdetailViewControllerをモーダルで起動し、アニメーションをYESに設定します。ページングされたscrollViewがスクロールされたときに、ModalViewControllerがアニメーション中に表示されない

最初のページ(左端)またはスクロールビューを表示している場合、すべて正常に動作します。ただし、他のページのいずれかにスクロールすると、モーダルビューのアニメーション(この場合は下から上にスライドする)は表示されません。代わりに、アニメーションが実行されるのと同じ長さの時間全体が黒くなり、モーダルビューコントローラが完全に表示されます。モーダルビューコントローラを解除するときも同じことが起こります。

コードは完全に標準です。私のbuttonViewControllerでは私が呼ん:

[self presentModalViewController:detailController animated:YES]; 

同じコードは、私が見ていますページに関係なく実行されます(ただし、当然のbuttonViewControllerの異なるインスタンス上で。)私はこれをデバッグを開始する方法を

答えて

2

これはdetailControllerのフレームと関係がある可能性があります... UIScrollViewの場合、最初のページは0から320の間ですが、そのオフセットの増分をスクロールすると、(フルスクリーンページ次のビューは320と640になり、次のビューは640と(640 + 320)になります(以下同様)。したがって、フレームCGRectMake(0,0,320,460)でdetailControllerを設定しているとき、最初のページに入っているときはアニメーションがうまく見えますが、他のページにあるときはアニメーションは(0,0) ViewControllerが推測しているのは、アクティブな画面ではないことがわかります。アクティブな画面がどこにあるかをモーダルビューコントローラに移します。このようなCGRectMake(320 * pageNumber、0,320,460)のようなフレームを初期化すると、あなたが探している動作がわかります。これが私の興味をそそられているかどうかは教えてください。

+0

動作していないようです。私はで追加: \t \t detailController.view.frame = CGRectMake(320 * self.page、0,320,460); \t \t ... \t \t [self presentModalViewController:detailController animated:YES]; しかし、それは違いを生じさせていないようです。メモとして、前にinitWithFrameを使用していなかったので、私はinitWithNibNameを使用していました。 これはいいアイデアでしたが、ありがとうございました。 –

+0

あなたはself.pageが正しく更新されていることを確信していますか?(つまり常に0ではない) – Daniel

+0

ええ、それは間違いなく正しく更新されています。 実際、上記のようにフレームを設定すると、実際には詳細コントローラのイメージビューが正しく表示されません。 –

0

アニメーション化しようとしているビューの下にUIView(または任意の種類のビュー、たとえばUIScrollView)を挿入する必要があります。アニメーションが正しく機能します。アニメーションの基になるビューを提供しているからです。

関連する問題