Swiftで、現在のスクロール量がaタグより前のときに所望の処理をしたいです。
scrollViewDidScrollとfunc webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)を組み合わせて使いたいです。
Swift
1var y_array : String = "" 2let get_yarray=""" 3 function get_atag_y(){ 4 var y_array2=""; 5 var doms = document.querySelectorAll('a'); 6 for (var i = 0; i < doms.length; i++) { 7 y_array2+=String(doms[i].getBoundingClientRect().top + window.pageYOffset) 8 if (i!=doms.length-1){ 9 y_array2+="," 10 } 11 } 12 return String(y_array2) 13 } 14 get_atag_y() 15 """ 16func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { 17webView.evaluateJavaScript(get_yarray, completionHandler: { (result, error) in 18 19 if let y_array = result as? String { 20 self.y_array = y_array//Int(y_array) 21 } 22 }) 23}
これでaタグの位置を読み込み後にy_array
変数に格納して、
Swift
1// MARK: UICollectionViewDelegate 2extension ViewController: UICollectionViewDelegate { 3 let y_array_ = self.y_array.components(separatedBy: ",") 4 func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { 5 scrollBeginingPoint = scrollView.contentOffset; 6 y_array_ = self.y_array.components(separatedBy: ",") 7 } 8 9 func scrollViewDidScroll(_ scrollView: UIScrollView) { 10 let currentPoint = scrollView.contentOffset 11 if (currentPoint.y > Int(y_array_[0])){ 12 現在のスクロール量がaタグより前のときの処理〜 13 } 14 } 15} 16
このとき、func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
の処理の方がfunc scrollViewDidScroll(_ scrollView: UIScrollView)
よりも遅いので、aタグが位置の格納されずNullになってしまいます。
また、extension ViewController: UICollectionViewDelegate
内でグローバル
変数のようにy_array_
をfunc scrollViewDidScroll(_ scrollView: UIScrollView)
に値渡ししたいのですが、
Extensions must not contain stored properties
とエラーが出てしまいます。
どうすればいいでしょうか
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。