Как мне вызвать animateAlongsideTransition в Swift?

#ios #swift #ios8

#iOS #swift #ios8

Вопрос:

Я перепробовал так много комбинаций, чтобы вызвать animateAlongSideTransition Swift для координатора перехода. Я чувствую, что упускаю что-то очень глупое.

Если я хочу вызвать это (из документов Swift):

 func animateAlongsideTransition(_ animation: ((UIViewControllerTransitionCoordinatorContext!) -> Void)!,
                     completion completion: ((UIViewControllerTransitionCoordinatorContext!) -> Void)!) -> Bool
  

Как мне это сделать? Я просто хочу передать некоторые вещи в блоке анимации и ничего в блоке завершения.

Ответ №1:

Это определенно то, что вы хотите сделать:

 coordinator.animateAlongsideTransition({ context in
        // do whatever with your context
        context.viewControllerForKey(UITransitionContextFromViewControllerKey)
    }, completion: nil)
  

Вы также можете опустить параметры, если используете переменные, например $0 , для первого неявного параметра и так далее

 coordinator.animateAlongsideTransition({
        $0.viewControllerForKey(UITransitionContextFromViewControllerKey)
    }, completion: nil)
  

Сначала in синтаксис удивляет, но его нужно изучить только один раз 🙂

  • Фигурные скобки определяют блок внутри функции
  • Вы используете in для отделения параметров от тела блока
  • Но, как я уже говорил выше, вы можете опустить параметры, используя $0 , $1 , $2 и так далее…

Кажется, что есть более подробный синтаксис, но он определенно не соответствует духу Swift (и я слишком ленив, чтобы опубликовать его там)

Надеюсь, это поможет (и я ничего не забыл …)

Редактировать:

Еще один профессиональный совет: когда блок является единственным параметром, вы можете даже опустить круглые скобки
(Следующий не будет работать, но это для понимания идеи)

 coordinator.animateAlongsideTransition{
        $0.viewControllerForKey(UITransitionContextFromViewControllerKey)
    }
  

Ответ №2:

Вы делаете это так (по крайней мере, в Swift 1.2):

 transitionCoordinator.animateAlongsideTransition({context in //things to animate, for example: view.alpha = 0.5
}, completion: nil)