我对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
或其他东西的另一个嵌套转换?
谢谢!
答案 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
}