Как представить половинный модальный контроллер просмотра сверху с помощью пользовательских переходов iOS 7

Как я могу представить контроллер "половинного просмотра" над верхней частью главного контроллера представления?

Требования: - Представить второй контроллер просмотра, который скользит по верхней части главного контроллера. - Контроллер второго представления должен показывать только половину основного контроллера вида - Контроллер основного вида должен оставаться видимым за вторым контроллером просмотра (прозрачный фон, не отображающий черный снизу) - Второй контроллер просмотра должен анимироваться с анимацией, подобной модальной вертикальной обложке, или пользовательским переходом iOS 7 - Пользователь все еще может взаимодействовать с кнопками на главном контроллере просмотра, когда активен контроллер второго вида (т.е. Контроллер второго вида не охватывает весь главный контроллер вида) r - Контроллер второго представления имеет свою сложную логику (не может быть простым видом) - Раскадровки, Segues, только iOS 7 - Только iPhone, а не iPad.

Я пробовал использовать modal view controller, но это не позволяет взаимодействовать с главным контроллером. Может ли кто-нибудь предоставить пример того, как это сделать с помощью пользовательского перехода iOS7 или другого метода.

Ответы

Ответ 1

Один из способов сделать это - добавить "половинный модальный" контроллер в качестве контроллера детского представления и оживить его представление. В этом примере я создал "половинный модальный" контроллер в раскадровке с фреймом, который на половине высоты экрана размером 4 дюйма. Вы можете использовать более динамические методы для учета разных размеров экрана, но это должно помочь вам начать.

@interface ViewController ()
@property (strong,nonatomic) UIViewController *modal;
@end

@implementation ViewController


- (IBAction)toggleHalfModal:(UIButton *)sender {
    if (self.childViewControllers.count == 0) {
        self.modal = [self.storyboard instantiateViewControllerWithIdentifier:@"HalfModal"];
        [self addChildViewController:self.modal];
        self.modal.view.frame = CGRectMake(0, 568, 320, 284);
        [self.view addSubview:self.modal.view];
        [UIView animateWithDuration:1 animations:^{
            self.modal.view.frame = CGRectMake(0, 284, 320, 284);;
        } completion:^(BOOL finished) {
            [self.modal didMoveToParentViewController:self];
        }];
    }else{
        [UIView animateWithDuration:1 animations:^{
            self.modal.view.frame = CGRectMake(0, 568, 320, 284);
        } completion:^(BOOL finished) {
            [self.modal.view removeFromSuperview];
            [self.modal removeFromParentViewController];
            self.modal = nil;
        }];
    }
}