您可以修改视图控制器的框架,但如果您使用 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,所以请朝那个方向思考。