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