#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)