あなたは、ビューコントローラのフレームを変更することができますが、のUIViewControllerの-presentModalViewController使用している場合:これは想定して(方法あなたのモーダルビューが画面上にアニメーション終了すると、背後にあるビューがアンロードされます。アニメーションをあなたはiPhone上にいます)、あなたのバックグラウンドビューが存在するはずの白い画面が表示されます。 iOSでは、モーダルビューコントローラがフルスクリーンのビューコントローラになり、メモリを節約するためにもう一方のビューがダンプされることが前提です。
実際に画面の一部にビューを表示したい場合は、現在のUIViewControllerのビューにUIView(UIViewControllerなし)をサブビューとして追加し、それを自分自身でアニメーション化する必要があります。私は、ビュー提示し、このような何かがあなたのUIViewControllerクラスに働くだろうと思う:ボーナスポイントについて
// Add the view as a subview and position it offscreen just below the current view
UIView *myHalfView = [[UIView alloc] initWithFrame:someAppropriateFrame];
[self.view addSubview:myHalfView];
CGRect offScreenFrame = myHalfView.bounds;
offScreenFrame.origin = CGPointMake(0.0, CGRectGetMaxY(self.view.frame));
// Now animate the view upwards
[UIView beginAnimations:nil context:nil];
// Move the view upwards the height of your sliding view so it's entirely onscreen
myHalfView.center = CGPointMake(myHalfView.center.x, myHalfView.center.y - myHalfView.bounds.size.height);
[UIView commitAnimations];
[myHalfView release];
を、あなたはUIViewのアニメーションブロックの前に
myHalfView.alpha = 0.0;
を設定することにより、ビューをフェードインでき、 centerプロパティをアニメーション化した後にブロック内に
myHalfView.alpha = 1.0;
を設定します。
この操作が完了したら、似たような操作を行うことができますが、逆の操作で画面を画面外にスライドさせることができます。 UIViewアニメーションブロックにanimationDidStopセレクタを追加して、ビューが画面外にスライドしたときに通知され、ビュー階層から削除できるようにすることができます。
ビューのスライドを上げることが標準的な動作であり、ビューが通常のビューのように見えるが途中で止まると、ユーザーは気になるはずです)は、アプリがフリーズしています。彼らはそれを理解するでしょうが、慎重に扱わなければあなたのアプリについて悪い気持ちを残します。主に、私はあなたのビューの最上部にUINavigationControllerを含むような標準的なフルスクリーンキューを使用することを避け、ユーザーが何が起こっているのかを理解するのを助けます。ハーフシートはiPhone上でUIActionSheetsになる傾向がありますので、その方向に考えてください。
これは、iPadで動作するようになります。 –
+1、素敵な解決策!簡単なもの:最後の行に左括弧「[」がありません。 – pille
良いキャッチ、ありがとう! – atticus