Как представить модальный вид на половину экрана? - PullRequest
5 голосов
/ 02 августа 2011

У меня есть UIViewController, и когда нажата кнопка, я хочу, чтобы половина экрана отображалась с UIPicker в нем.

Я сделал UIView в IB с UIPicker вместе с UIToolBar с кнопками Done / Cancel.

Как я могу сделать так, чтобы только этот половинный вид скользил вверх, а фоновый вид все еще показывался, но затемнялся или не мог воспроизводиться.

Я пока использую этот код:

- (void)showModalView
{
    [self.popupView setFrame:CGRectMake(0, self.view.frame.size.height, self.view.frame.size.width, self.view.frame.size.height)];
    [self.view addSubview:self.popupView];

    [UIView animateWithDuration:.2 animations:^{
        [self.popupView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    }];
}

Вот картинка: http://www.box.net/shared/static/08ji4s0f6i1b8qubrtz6.png

Ответы [ 2 ]

4 голосов
/ 02 августа 2011

@ Jon:

METHOD-1:

Сделайте ваш основной вид прозрачным, установив его альфа-значение на 0 и добавив подпредставление к основному виду, который являетсятолько половину основного экрана и оставьте его непрозрачным (альфа-значение равно 1), как это было бы по умолчанию.

Затем просто представьте контроллер представления, используя существующий Modal View Controller.

Имейте в видучто из-за прозрачности вы сможете увидеть половину предыдущего представления, но не сможете прикоснуться к нему, так как есть прозрачное представление.

МЕТОД-2:

Другой способ - анимировать UIView размером с половину существующего представления.

Тогда вам нужнопросто следуйте анимации UIView.

Здесь, поскольку это просто UIView, который будет добавлен как подпредставление к существующему представлению, вы сможете прикоснуться к остальной части экрана.

Таким образом, вы можете использовать любой из методов согласно вашему требованию.

Надеюсь, это поможет вам.

2 голосов
/ 02 августа 2011

Вот то, что вам нужно, это открытый исходный код на github TDSemiModalView, имеющем половину выбора даты просмотра.Проверьте демонстрационный проект внутри кода.Вот ссылка .. Надеюсь, это решит вашу проблему.

TDSemiModalClass

...