2015-07-06 14 views
18

Prima di spiegare il mio problema, è importante dire che ho già implementato il suggerimento fatto in this question e penso che i miei dubbi su questo metodo animateWithDuration siano abbastanza diversi, nonostante entrambe le domande abbiano un titolo molto simile.UIView.animateWithDuration in Swift 2.0?

Quindi, sono un principiante di Swift e sto realizzando alcuni piccoli progetti in Swift, basati su precedenti demo dell'obiettivo C che ho fatto prima.

Questo è il mio codice C Obiettivo:

- (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; 
         } 
        }]; 
} 

E questa è la mia versione 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 
     } 
    }) 
} 

e ottengo questo errore.

non può invocare 'animateWithDuration' con una lista di argomenti di tipo '(Doppio, ritardo: Doppio, opzioni: UIViewAnimationTransition, animazioni:() -> Void, di completamento: (bool) -> Void)'

Ho letto la documentazione ma in realtà non sono sicuro di quale sia il problema.

Btw, sto lavorando su Xcode 7 e Swift 2.0

risposta

32

Si passa enum di tipo UIViewAnimationTransition ad un argomento che richiede digitare UIViewAnimationOptions (options argomento)

Ecco la sintassi corretta con l'enumerazione corretta valore:

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 
    }) 
} 
+0

Ciao! Grazie per la tua risposta. In effetti, hai ragione. (il mio male, non ho capito la differenza tra UIViewAnimationTransition.None e UIViewAnimationOptions.TransitionNone). Ho corretto quella linea, ma ho ancora lo stesso problema. Ho appena cancellato questa riga (self.contentView.frame = CGRectMake (iXposition, 20.0, self.contentView.frame.size.width, self.contentView.frame.size.height) ) e tutto ha funzionato. Ma quando lo rimetto, ho lo stesso errore di cui ho parlato prima. Hai qualche consiglio? Sarebbe molto utile – Jadekin

+0

L'errore che si ottiene con la riga inserita non ha davvero senso per me, ma il problema è che il metodo 'moveSidebarToXposition' prende un argomento di tipo' Float' che si inserisce in un 'CGRect' , che richiede un tipo di 'CGFloat'. Quindi è necessario convertirlo in questo modo: 'let convertXposition = CGFloat (iXPosition)' e usare 'convertitoXposition' nella costruzione' CGRect' – imas145

+0

Si veda la mia risposta aggiornata – imas145

Problemi correlati