1

我有一个带有按钮的 UIScrollview,用于左右分页:

@IBAction func leftPressed(sender: AnyObject) {

    self.scrollView!.setContentOffset(CGPointMake(0, 0), animated: true)
} 

我想在滚动视图完成分页动画后执行一个动作。就像是:

@IBAction func leftPressed(sender: AnyObject) {

    self.scrollView!.setContentOffset(CGPointMake(0, 0), animated: true)

    secondFunction()
}

上面的代码不起作用,因为第二个函数在滚动视图完成动画偏移之前运行。我最初的反应是使用完成处理程序,但我不确定如何将其应用于 setContentOffset 函数。我试过了:

func animatePaging(completion: () -> Void) {

    self.mainScrollView!.setContentOffset(CGPointMake(0, 0), animated: true)

    completion()
}

随着电话

animatePaging(completion: self.secondFunction())

但我收到错误“无法使用'(completion())'类型的参数列表调用'animatePaging'。有什么想法吗?

4

2 回答 2

4

问题是您需要滚动动画本身的完成处理程序。但setContentOffset(_:animated:)没有完成处理程序。

一种解决方案是您自己使用UIView的静态函数为滚动设置动画animateWithDuration(_:animations:completion:)。该函数有一个可以使用的完成处理程序:

UIView.animateWithDuration(0.5, animations: { () -> Void in
        self.scrollView.contentOffset = CGPointMake(0, 0)
    }) { (finished) -> Void in
        self.secondFunction()
    }
于 2015-10-29T21:43:25.963 回答
0

从 joern 更新答案 - Swift 4.2

UIView.animate(withDuration: 0.5, animations: { [unowned self] in
   self.scrollView.contentOffset = .zero
}) { [unowned self] _ in
   self.secondFunction()
}
于 2019-01-23T07:33:29.237 回答