2015-07-06 18 views
18

Zanim wyjaśnisz mój problem, ważne jest, aby powiedzieć, że już zaimplementowałem sugestię podaną w this question i myślę, że moje wątpliwości dotyczące tej metody animateWithDuration są zupełnie inne, mimo że oba pytania mają bardzo podobny tytuł.UIView.animateWithDuration w Swift 2.0?

Jestem nowicjuszem Swift i robię małe projekty w Swift, oparte na wcześniejszych demach Celu C, które wcześniej robiłem.

To jest mój kod 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; 
         } 
        }]; 
} 

A to jest moja wersja 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 
     } 
    }) 
} 

i dostaję ten błąd.

nie może powoływać 'animateWithDuration' z listy argumentów typu '(dwukrotnie, opóźnienie: Pokój, opcje: UIViewAnimationTransition, animacje:() -> Void realizacji: (Bool) -> void)'

Przeczytałem dokumentację, ale właściwie nie jestem pewien, na czym polega problem.

Btw, ja pracuję na Xcode 7 i Swift 2.0

Odpowiedz

32

są przechodzącą enum typu UIViewAnimationTransition do argumentu, który wymaga wpisać UIViewAnimationOptions (options argument)

Oto poprawna składnia z prawidłowym wyliczenia wartość:

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

Witam! Dzięki za odpowiedź. Właściwie masz rację. (moje złe, nie zdawałem sobie sprawy z różnicy między UIViewAnimationTransition.None i UIViewAnimationOptions.TransitionNone). Poprawiłem tę linię, ale nadal mam ten sam problem. Właśnie usunąłem tę linię (self.contentView.frame = CGRectMake (iXposition, 20.0, self.contentView.frame.size.width, self.contentView.frame.size.height) ) i wszystko działało. Ale kiedy ją odkładam, pojawia się ten sam błąd, o którym wspominałem wcześniej. Czy masz jakieś rady? Byłbym bardzo pomocny – Jadekin

+0

Błąd, który otrzymujesz z wstawioną linią, nie ma dla mnie sensu, ale problem polega na tym, że twoja metoda 'moveSidebarToXposition' przyjmuje argument typu' Float', który wstawiasz do 'CGRect' , który wymaga typu 'CGFloat'. Musisz więc przekonwertować go w ten sposób: 'let convertXposition = CGFloat (iXPosition)' i użyj 'przekonwertowanejXpozycji' w konstrukcji' CGRect' – imas145

+0

Proszę zobaczyć moją zaktualizowaną odpowiedź – imas145

Powiązane problemy