Вы можете изменить фрейм контроллера представления, но если вы используете -presentModalViewController UIViewController: 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;
внутри блока после анимации свойства center.
Когда вы закончите, вы можете сделать что-то похожее, но в обратном порядке, чтобы переместить вид за экран. Вы можете добавить селектор animationDidStop в блок анимации UIView, чтобы получать уведомления, когда представление сдвинулось с экрана, чтобы вы могли удалить его из иерархии представления.
С эстетической точки зрения, вы также должны быть осторожны, как вы это делаете, поскольку скольжение вида вверх является стандартным поведением, и если ваш вид выглядит как обычный вид, но останавливается на полпути, пользователи могут чувствовать (даже кратко) что приложение заморожено. Они поймут это, но это оставит плохое предчувствие по поводу вашего приложения, если не обращаться с ним осторожно. Главным образом, я бы не использовал стандартные полноэкранные подсказки, такие как UINavigationController вверху вашего обзора, чтобы помочь пользователям понять, что происходит. Половинные листы, как правило, являются UIActionSheets на iPhone, так что подумайте в этом направлении.