2013-08-07 2 views
1

У меня есть особый сценарий, который я пытаюсь подражать, и, будучи довольно новым для Cocoa Touch, я не уверен в лучшем способе его достижения. Простите мои недостающие тактические знания; мы надеемся, что ясная экспозиция поможет.Как выполнить «90% -ный слайд» между двумя UIViews

Я хотел бы эмулировать:

приложение я смотрю (в частности) является Beat. Ниже приведен пример одного из их UIViews - в частности, обратите внимание на значок шестеренки для настроек внизу.

enter image description here

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

  1. оригинальный UIView скользит вверх по экрану около 90% пути (The ключа точки что он не скользит все путь вверх).
  2. Новый UIView соскользнул, чтобы заполнить это недавно освобожденное пространство на 90%.

enter image description here

Это основные функции, которые я хотел бы сделать.

Идея Реализация # 1: Single UIViewController ж/Несколько UIViews

Сначала я считал, имея один UIViewController управлять как "основной" и мнения "настройки". В этом случае было бы довольно просто перевести эти взгляды соответствующим образом.

Это, как мне кажется, немного загромождает меня. В зависимости от того, насколько надежны мои два набора функциональных возможностей, это рецепт перегрузки одного UIViewController. Вы могли бы сказать мне, что все в порядке, но с места в карьер, кажется, слишком много.

Идея Реализация # 2: Несколько UIViewControllers В рамках пользовательского Container ViewController

Это маршрут я в настоящее время идет вниз. Она отделяет два дискретных наборов функциональных возможностей в отдельные UIViewControllers (содержится в контейнере ViewController) и переходы между ними с помощью:

- (void)flipFromViewController:(UIViewController *)fromController 
       toViewController:(UIViewController *)toController 
{ 
    CGFloat width = self.view.frame.size.width; 
    CGFloat height = self.view.frame.size.height; 

    fromController.view.frame = CGRectMake(0.0f, 0.0f, width, height); 
    toController.view.frame = CGRectMake(0.0f, height, width, height); 

    [self addChildViewController:toController]; 
    [fromController willMoveToParentViewController:nil]; 

    [self transitionFromViewController:fromController 
         toViewController:toController 
           duration:0.5f 
           options:UIViewAnimationOptionTransitionNone 
          animations:^(void) { 
           fromController.view.frame = CGRectMake(0.0f, -(height - 100.0f), width, height); 
           toController.view.frame = CGRectMake(0.0f, 100.0f, width, height); 
          } 
          completion:^(BOOL finished) { 
           [fromController removeFromParentViewController]; 
           [toController didMoveToParentViewController:self]; 
          }]; 
} 

Проблема с этим является переход: это не похоже, чтобы остановить «90% пути ". Похоже, что он полностью соответствует переход из «старого» контроллера и в «новый» контроллер, хотя мои корректировки кадров на двух UIView не должны быть «полными» ходами.

где я хотел бы Наведение

Я не прошу для полного решения - ваш опыт будет слишком дорого. :) Это говорит о том, что я довольно новичок в этом, я бы хотел, чтобы вы поняли, каким будет правильный подход. Пожалуйста, дайте мне знать, если я могу предоставить дополнительную информацию.

Спасибо!

ответ

1

Я действительно думаю, что ваш второй метод находится на правильном пути, и ваша интуиция об использовании переходаFromViewController: ToViewController также прав - я бы не использовал этот метод, если вы хотите, чтобы оба контроллера представления присутствовали и активны. Итак, у меня будет контроллер с представлением передачи, который будет контроллером детского представления настраиваемого контроллера контейнера, а затем добавьте второго ребенка с экрана на дно, как у вас. Затем анимируйте оба представления с помощью animateWithDuration: ... В конце этого, анимация, вы должны иметь то, что хотите, и у контроллера контейнера будет двое детей.

+0

Это делает трюк! Спасибо. – ABach

Смежные вопросы