Синтаксис UIView transitionWithView swift

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