在解释我的问题之前,重要的是要说我已经实现了 this question 中提出的建议我认为我对这个 animateWithDuration
方法的怀疑是完全不同的,尽管这两个问题的标题非常相似。
所以,我是一个 Swift 新手,我正在 Swift 中做一些小项目,基于我之前做过的 Objective C 演示。
这是我的 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;
}
}];
}
这是我的 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
}
})
}
我得到了这个错误。
Cannot invoke 'animateWithDuration' with an argument list of type '(Double, delay: Double, options: UIViewAnimationTransition, animations: () -> Void, completion: (Bool) -> Void)'
我阅读了文档,但实际上我不确定问题出在哪里。
顺便说一句,我正在研究 Xcode 7 和 Swift 2.0
最佳答案
您正在将 UIViewAnimationTransition
类型的枚举传递给需要类型 UIViewAnimationOptions
的参数(options
参数)
这是具有正确枚举值的正确语法:
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
})
}
关于ios - Swift 2.0 中的 UIView.animateWithDuration?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255374/