Как добавить завершение в анимацию? - PullRequest
0 голосов
/ 28 мая 2018

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

   func btnUp(card: CardSubview, frame: CGRect) {

        let newPosition = CGRect(x: (self.superview?.frame.minX)!, y: (self.superview?.frame.maxY)!, width: card.bounds.width, height: card.bounds.height)
        //UIView.animate(withDuration: 3.0, animations: {card.frame = newPosition})
        UIView.animate(withDuration: 3.0, animations: {card.frame = newPosition}, completion: {if card.frame == newPosition {card.removeFromSuperview()}})

    }

, это работает, но если я хочу добавить завершение, я получаю эту ошибку:

Невозможно преобразовать значениетипа '() -> ()' к ожидаемому типу аргумента '((Bool) -> Void)?' **

так что же я не так делаю?

Ответы [ 3 ]

0 голосов
/ 28 мая 2018
UIView.animate(withDuration: 0.25, animations: {
   view.transform = CGAffineTransform(translationX: view.frame.maxX, y: 0)
},completion:{(completed:Bool) in
   if(completed){view.removeFromSuperview()}
})
0 голосов
/ 28 мая 2018

Документация Apple гласит:

завершение

Объект блока, который будет выполнен после завершения последовательности анимации.Этот блок не имеет возвращаемого значения и принимает один логический аргумент, который указывает, действительно ли анимация закончилась до вызова обработчика завершения.

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

UIView.animate(withDuration: 3.0, animations: {card.frame = newPosition}, completion: { finish in
    if card.frame == newPosition {
         card.removeFromSuperview()
    }
})
0 голосов
/ 28 мая 2018

Попробуйте:

Вам необходимо установить completion block переменную

func btnUp(card: CardSubview, frame: CGRect) {

    let newPosition = CGRect(x: (self.superview?.frame.minX)!, y: (self.superview?.frame.maxY)!, width: card.bounds.width, height: card.bounds.height)
    //UIView.animate(withDuration: 3.0, animations: {card.frame = newPosition})
    UIView.animate(withDuration: 3.0, animations: {
        card.frame = newPosition
        }, completion: { finish in
             if card.frame == newPosition {card.removeFromSuperview()

        }})
}
...