ビューコントローラのフレームを変更できますが、UIViewControllerの-presentModalViewController:animated:メソッドを使用している場合、モーダルビューが画面上でアニメーション化を完了すると、背後のビューがアンロードされます(これはiPhoneを使用していることを前提としています)背景ビューがあるべき場所に白い画面が表示されます。iOSは、モーダルビューコントローラーがフルスクリーンビューコントローラーであると想定し、メモリを節約するために他のビューをダンプします。
画面の一部にビューを表示したい場合は、代わりにUIView(UIViewControllerなし)を現在の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];
ボーナスポイントについては、設定することでビューをフェードインできます
myHalfView.alpha = 0.0;
UIViewアニメーションブロックの前、および設定
myHalfView.alpha = 1.0;
センタープロパティをアニメートした後のブロック内。
完了したら、同様のことを行うことができますが、逆にビューを画面外にスライドさせることができます。UIViewアニメーションブロックにanimationDidStopセレクターを追加して、ビューが画面から滑り落ちたときに通知を受け取ることができるため、ビュー階層からビューを削除できます。
ビューを上にスライドさせるのが標準的な動作であるため、美的観点からも注意が必要です。ビューが通常のビューのように見えても途中で停止した場合、ユーザーはアプリを(短時間でも)感じる可能性があります。凍結しました。彼らはそれを理解するでしょう、しかしそれは注意深く扱われなければあなたのアプリについて悪い気持ちを残すでしょう。主に、ビューの上部にUINavigationControllerを含めて、ユーザーが何が起こっているのかを理解できるようにするなど、標準のフルスクリーンキューを使用することは避けます。ハーフシートはiPhoneではUIActionSheetsになる傾向があるので、その方向に考えてください。