Мне не удается заставить блоки работать на Swift. Вот пример, который работал (без блока завершения):
UIView.animateWithDuration(0.07) {
self.someButton.alpha = 1
}
или, как вариант, без замыкающего закрытия:
UIView.animateWithDuration(0.2, animations: {
self.someButton.alpha = 1
})
но как только я пытаюсь добавить блок завершения, он просто не работает:
UIView.animateWithDuration(0.2, animations: {
self.blurBg.alpha = 1
}, completion: {
self.blurBg.hidden = true
})
Автозаполнение дает мне, completion: ((Bool) -> Void)?
но не знаю, как заставить его работать. Также пробовал с завершающим закрытием, но получил ту же ошибку:
! Could not find an overload for 'animateWithDuration that accepts the supplied arguments
Обновление для Swift 3/4:
// This is how I do regular animation blocks
UIView.animate(withDuration: 0.2) {
<#code#>
}
// Or with a completion block
UIView.animate(withDuration: 0.2, animations: {
<#code#>
}, completion: { _ in
<#code#>
})
Я не использую завершающее замыкание для блока завершения, потому что думаю, что ему не хватает ясности, но если вам это нравится, вы можете увидеть ответ Тревора ниже .
Ответы:
параметр завершения в animateWithDuration принимает блок, который принимает один логический параметр. В swift, как и в блоках Obj C, вы должны указать параметры, которые принимает замыкание:
Важной частью здесь является расширение
(value: Bool) in
. Это сообщает компилятору, что это закрытие принимает значение типа Bool с меткой 'value' и возвращает значение void.Для справки: если вы хотите написать замыкание, возвращающее bool, синтаксис будет следующим:
источник
$0
для первого аргумента, просто используя переменную внутри блока, компилятор выясняет, что ваш блок принимает аргумент.Завершение правильно, то затвор должен принять
Bool
параметр:(Bool) -> ()
. Пытатьсяисточник
Само подчеркивание рядом с
in
ключевым словом игнорирует вводSwift 2
Свифт 3, 4, 5
источник
Это мое решение выше, основанное на принятом выше ответе. Он затемняет вид и скрывает его, когда-то почти невидимым.
Swift 2
Свифт 3, 4, 5
источник
Вот и все, это скомпилирует
Swift 2
Свифт 3, 4, 5
Причина, по которой я сделал область Bool подчеркиванием, заключается в том, что вы не используете это значение, если оно вам нужно, вы можете заменить (_) на (value: Bool)
источник
Иногда вы хотите добавить это в переменную для анимации по-разному в зависимости от ситуации. Для этого вам нужно
Или вы можете использовать столь же подробный:
Но в любом случае нужно
Bool
где-то указать .источник
SWIFT 3.x + 4.x
Хочу обновить и упростить.
Пример ниже реализован в любом
view
случае, когда он медленно скрывается и полностью прозрачен; удаляет себя от родителяview
ok
переменная всегда возвращаетсяtrue
с завершением анимации.источник