我對Swift非常陌生,嘗試創建一個應用程序,其中頁面之間的滑動正常工作,但也涉及基於滑動距離的背景顏色更改。在Swift中跟蹤滑動移動
因此,我想「劫持」滑動手勢,所以我可以添加一些行爲。我能找到的最好的方法是this question/answer。
翻譯從選擇的答案代碼爲斯威夫特3,我下面的代碼添加到我的RootViewController
的viewDidLoad
功能:
for subview in (pageViewController?.view.subviews)!{
if let coercedView = subview as? UIScrollView {
coercedView.delegate = (self as! UIScrollViewDelegate)
}
}
我的印象是,上面的代碼就會讓我delegate
功能(如scrollViewDidScroll
到我正在編寫上面的代碼的類中,以便我可以定義該函數,調用super.scrollViewDidScroll
,然後添加我想要的任何其他功能。
不幸的是,上面的代碼不會拋出任何編譯錯誤,的確,當我嘗試構建應用程序拋出一個錯誤:
Could not cast value of type 'My_App.RootViewController' (0x102cbf740) to 'UIScrollViewDelegate' (0x1052b2b00).
而且,當我嘗試在我的課寫override func scrollViewDidScroll
,我得到一個編譯錯誤告訴我函數不存在覆蓋,這即使我通過了錯誤,也不會被調用,這使我不禁思考,但這不是解決此問題的正確方法。
對不起,這是一個很不好的問題,但我對如何解決這個問題的基本架構以及我是否正確理解給定的答案以及出現了什麼問題感到非常困惑。
我在翻譯delegate
,那答案是否正確? 我委託給正確的對象嗎? (這是正確的術語嗎?) 有沒有更好的方法來處理這個問題? 我強制/鑄造不當嗎?我應該改爲做:
view.delegate = (SomeHandMadeViewDelegateWhichDefinesScrollViewDidScroll as! UIScrollViewDelegate)
或類似的東西/不同(與let coercedSelf = self as? UIScrollViewDelegate
什麼的另一個嵌套鑄造
感謝
「當我嘗試寫'重寫func scrollViewDidScroll' ...」實現該特定方法。但它不,所以'覆蓋'是不合適的。所以,(a)聲明你的視圖控制器符合'UIScrollViewDelegate'協議;和(b)實現你想要的任何「UIScrollViewDelegate」方法,而不需要「覆蓋」(除非你的超類恰好實現了這個特定的方法)。 – Rob