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
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
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
Proszę zobaczyć moją zaktualizowaną odpowiedź – imas145