在Swift中跟踪滑动移动

时间:2016-11-18 23:54:18

标签: ios swift swift3

我对Swift很新,并试图创建一个应用程序,其中页面之间的滑动正常工作,但也涉及基于滑动距离的背景颜色的变化。

因此,我想“劫持”滑动手势,因此我可以添加一些行为。我能找到的最好的方法是this question/answer

将所选答案中的代码翻译成Swift 3,我将以下代码添加到RootViewController的{​​{1}}函数中:

viewDidLoad

我的印象是上面的代码会让我 for subview in (pageViewController?.view.subviews)!{ if let coercedView = subview as? UIScrollView { coercedView.delegate = (self as! UIScrollViewDelegate) } } 函数(比如delegate到我正在编写上面代码的类中,这样我就可以定义该函数,调用{ {1}},然后添加我想要的任何其他功能。

不幸的是,上面的代码没有抛出任何编译错误,当我尝试构建应用程序时, 会抛出错误:

scrollViewDidScroll

此外,当我尝试在我的类中编写super.scrollViewDidScroll时,我收到一个编译错误,告诉我该函数不存在要覆盖,这让我觉得即使我超越了错误,它也不会被调用,这不是处理这个问题的正确方法。

我很抱歉这是一个非常无聊的问题,但我对如何解决这个问题的基本架构感到非常困惑,以及我是否正确理解了给定的答案,以及出了什么问题。

我是否正确地解释了Could not cast value of type 'My_App.RootViewController' (0x102cbf740) to 'UIScrollViewDelegate' (0x1052b2b00). 和那个答案? 我是否委托给正确的对象? (这是正确的术语吗?) 有没有更好的方法来处理这个? 我是否胁迫/施法不当?我应该这样做:

override func scrollViewDidScroll

或类似/不同的东西(使用delegate或其他东西的另一个嵌套转换?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你想要抓住一些滚动位置和东西吗?然后做

class RootViewController {
   // Your stuff

   for subview in pageViewController!.view.subviews {
     if let coercedView = subview as? UIScrollView {
      coercedView.delegate = self
     }
}

extension RootViewController : UIScrollViewDelegate {
   // Your scrollView stuff there
}