#ios #uiview #swift
#iOS #uiview #swift
Вопрос:
Может ли кто-нибудь помочь мне с синтаксисом transitionWithView в swift. в objective-c я бы использовал его следующим образом:
[UIView transitionWithView:[ self view ] duration:0.325 options:UIViewAnimationOptionCurveEaseOut animations:
^{
// do the transition
}
completion:
^( BOOL finished ){
// cleanup after the transition
}];
Однако я не могу заставить обработчик завершения работать.
Спасибо
Комментарии:
1. Я рекомендую подробнее прочитать о замыканиях в Swift : developer.apple.com/library/prerelease/ios/documentation/swift /…
Ответ №1:
это было бы так в Swift 5.x:
UIView.transition(with: self.view, duration: 0.325, options: .curveEaseInOut, animations: {
// animation
}) { finished in
// completion
}
Комментарии:
1. Для тех, кто появится в будущем, блок завершения теперь может быть записан как:
completion: { finished in //write code here }
Ответ №2:
Я хотел бы добавить к принятому ответу, что вы можете передать несколько параметров transitionWithView
, передав массив следующим образом:
Swift 3, 4, 5
UIView.transition(with: status, duration: 0.33, options:
[.curveEaseOut, .transitionCurlDown], animations: {
//...animations
}, completion: {_ in
//....transition completion
delay(seconds: 2.0) {
}
})
Swift 2.0
UIView.transitionWithView(status, duration: 0.33, options:
[.CurveEaseOut, .TransitionCurlDown], animations: {
//...animations
}, completion: {_ in
//....transition completion
delay(seconds: 2.0) {
}
})
Swift 1.2
UIView.transitionWithView(status, duration: 0.33, options:
.CurveEaseOut | .TransitionCurlDown, animations: {
//...animations
}, completion: {_ in
//transition completion
delay(seconds: 2.0) {
}
})
и, конечно, вы также можете использовать полный синтаксис, подобный этому:
[UIViewAnimationOptions.CurveEaseOut, UIViewAnimationOptions.TransitionCurlDown]
Ответ №3:
Swift 3
UIView.transition(with: someview,
duration:0.6,
options:UIViewAnimationOptions.transitionFlipFromLeft,
animations: {
// do something
}, completion:{
finished in
// do something
})
Ответ №4:
документы немного сложно найти, но это должно сработать:
UIView.transitionWithView(self.view,
duration:0.325,
options: options:UIViewAnimationOptions.CurveEaseOut,
animations: {
…
},
completion: {
finished in
…
})
Вы могли бы использовать конечное закрытие, если хотите, для completion
обработчика, но я бы не стал в этом случае, это было бы слишком грязно / неясно.
Но если бы вы не собирались передавать блок анимации, он был бы читаемым на границе:
UIView.transitionWithView(self.view, duration:0.325, options: options:UIViewAnimationOptions.CurveEaseOut, animations: nil) {
finished in
…
}