Swift 2.0中的UIView.animateWithDuration是什么?

18
在解释我的问题之前,重要的是要说一下我已经实现了这篇问答中提出的建议,并且我认为尽管两个问题的标题非常相似,但我对于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
        }
    })
}

我遇到了以下错误:

无法调用具有类型为 '(Double, delay: Double, options: UIViewAnimationTransition, animations: () -> Void, completion: (Bool) -> Void)' 的参数列表的 'animateWithDuration'

我已经阅读了文档,但实际上我不确定问题出在哪里。

顺带一提,我正在使用Xcode 7和Swift 2.0。

1个回答

32

您正在将类型为UIViewAnimationTransition的枚举传递给需要类型为UIViewAnimationOptionsoptions参数)的参数。

以下是正确语法和正确的枚举值:

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

嗨!谢谢你的回复。事实上,你是对的。(我的错,我没有意识到UIViewAnimationTransition.None和UIViewAnimationOptions.TransitionNone之间的区别)。我纠正了那一行,但问题仍然存在。我只是删除了这一行(self.contentView.frame = CGRectMake(iXposition, 20.0, self.contentView.frame.size.width, self.contentView.frame.size.height)),然后一切都正常了。但是当我把它放回去时,我得到了之前提到的同样的错误。你有什么建议吗?我会非常感激。 - Jadekin
你插入的那一行代码出现的错误对我来说并不是很有意义,但问题在于你的方法 moveSidebarToXposition 接受一个类型为 Float 的参数,而你将其插入到了需要 CGFloat 类型的 CGRect 中。因此,你需要像这样进行转换:let convertXposition = CGFloat(iXPosition),然后在 CGRect 构造中使用 convertedXposition - imas145
是因为我必须将该属性声明为常量吗?但它能够工作!谢谢! - Jadekin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接