web-dev-qa-db-fra.com

UIView.animateWithDuration dans Swift 2.0?

Avant d'expliquer mon problème, il est important de dire que j'ai déjà implémenté la suggestion faite dans cette question et je pense que mes doutes sur cette méthode animateWithDuration sont assez différents, malgré les deux questions ayant un titre très similaire.

Donc, je suis un débutant Swift et je fais quelques petits projets dans Swift, basés sur des démos Objective C précédentes que j'ai faites auparavant.

Voici mon code Objective C:

- (void)moveSideBarToXposition: (int) iXposition{

    [UIView animateWithDuration:0.5f
                          delay:0.1
                        options: UIViewAnimationOptionTransitionNone
                     animations:^{  self.mainView.frame = CGRectMake(iXposition, 20, self.mainView.frame.size.width, self.mainView.frame.size.height); }

                     completion:^(BOOL finished){
                         if (self.isSidebarHidden==YES) {
                             self.isSidebarHidden = NO;
                         }

                         else{
                             self.isSidebarHidden = YES;
                         }
                     }];
}

Et voici ma Swift:

func moveSideBarToXposition(iXposition: Float) {

    UIView.animateWithDuration(0.5, delay: 1.0, options: UIViewAnimationTransition.None, animations: { () -> Void in

        self.contentView.frame = CGRectMake(iXposition, 20, self.contentView.frame.size.width, self.contentView.frame.size.height)

    }, completion: { (finished: Bool) -> Void in

        if isMenuHidden == true {
            isMenuHidden = false
        } else {
            isMenuHidden = true
        }
    })
}

Et je reçois cette erreur.

Impossible d'appeler 'animateWithDuration' avec une liste d'arguments de type '(Double, delay: Double, options: UIViewAnimationTransition, animations: () -> Void, complétion: (Bool) -> Void)'

J'ai lu la documentation mais je ne sais pas vraiment quel est le problème.

Btw, je travaille sur Xcode 7 et Swift 2.0

18
Jadekin

Vous passez une énumération de type UIViewAnimationTransition à un argument qui requiert le type UIViewAnimationOptions (options argument)

Voici la syntaxe correcte avec la valeur d'énumération correcte:

func moveSideBarToXposition(iXposition: Float) {
    let convertedXposition = CGFloat(iXposition)
    UIView.animateWithDuration(0.5, delay: 1.0, options: UIViewAnimationOptions.TransitionNone, animations: { () -> Void in

        self.contentView.frame = CGRectMake(convertedXposition, 20, self.contentView.frame.size.width, self.contentView.frame.size.height)

        }, completion: { (finished: Bool) -> Void in

            // you can do this in a shorter, more concise way by setting the value to its opposite, NOT value
            isMenuHidden = !isMenuHidden
    })
}
32
imas145