質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1239閲覧

func scrollViewDidScrollを使って複数のUIScrollviewを連動させたい。

hirokun823

総合スコア9

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/09/02 02:20

初歩的な内容で恐縮ですが、自力では前に進めなくなってしまい、質問させて頂きます。

前提・実現したいこと

swiftで同じ画面上に2つのscrollViewを配置して、片方をスクロールした時、もう片方も同じx座標まで連動させたいです。
func scrollViewDidScroll()を使って途中まで出来たのですが、双方向に連動させることが出来ない状態です。

青scrollViewを動かす→黄scrollViewが連動する ◯
黄scrollViewを動かす→青scrollViewが連動する ×
という状態です。

これを
青scrollViewを動かす→黄scrollViewが連動する ◯
黄scrollViewを動かす→青scrollViewが連動する ◯
という状態にしたいです。

※ストーリーボードは使わず、全てコードで処理したいです。

該当のソースコード

swift

1import UIKit 2 3class ViewController: UIViewController, UIScrollViewDelegate { 4 5 // 画面の横幅 6 let screenWidth:Double = Double(UIScreen.main.bounds.size.width) 7 // 画面の縦幅 8 let screenHeight:Double = Double(UIScreen.main.bounds.size.height) 9 10 let scroll = UIScrollView() 11 let scroll2 = UIScrollView() 12 13 let scrLabel = UILabel() 14 let scrLabel2 = UILabel() 15 16 override func viewDidLoad() { 17 super.viewDidLoad() 18 // Do any additional setup after loading the view, typically from a nib. 19 20 //scroll 21 scroll.frame = CGRect(x: 0, y: 0, width: screenWidth, height: 100) 22 scroll.backgroundColor = UIColor.blue 23 scroll.contentSize = CGSize(width: screenWidth*2, height: 100) 24 scroll.delegate = self 25 self.view.addSubview(scroll) 26 27 //scroll2 28 scroll2.frame = CGRect(x: 0, y: 100, width: screenWidth, height: 100) 29 scroll2.backgroundColor = UIColor.yellow 30 scroll2.contentSize = CGSize(width: screenWidth*2, height: 100) 31 scroll2.delegate = self 32 self.view.addSubview(scroll2) 33 34 //scrLabel 35 scrLabel.frame = CGRect(x: 0, y: 0, width: screenWidth, height: 100) 36 scrLabel.backgroundColor = UIColor.clear 37 scrLabel.text = "1234567890" 38 scrLabel.textColor = UIColor.black 39 self.scroll.addSubview(scrLabel) 40 41 //scrLabel2 42 scrLabel2.frame = CGRect(x: 0, y: 0, width: screenWidth, height: 100) 43 scrLabel2.backgroundColor = UIColor.clear 44 scrLabel2.text = "abcdefghij" 45 scrLabel2.textColor = UIColor.black 46 self.scroll2.addSubview(scrLabel2) 47 48 } 49 50 //scrollViewの座標変更時の挙動 51 func scrollViewDidScroll(_ scroll: UIScrollView) { 52 print(scroll.contentOffset.x) 53 scroll2.contentOffset = CGPoint(x: scroll.contentOffset.x , y: 0) 54 } 55 56 override func didReceiveMemoryWarning() { 57 super.didReceiveMemoryWarning() 58 // Dispose of any resources that can be recreated. 59 } 60 61 62}

イメージ説明

以上です。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

試してなくて申し訳ないんだけど、
scrollに送られてくるscrollViewをtagで判別してあげてif文ででも条件分けしてあげれば動きそう。

参考URL

動かなかったらごめんなさい。

###追記
ボケてました、ごめんなさい。tagを設定しなくてもUIScrollView()の名前でも動きますね

swift

1//scrollViewの座標変更時の挙動 2 func scrollViewDidScroll(_ scroll: UIScrollView) { 3 if scroll == scroll { 4 scroll2.contentOffset = CGPoint(x: scroll.contentOffset.x , y: 0) 5 } else { 6 scroll.contentOffset = CGPoint(x: scroll2.contentOffset.x , y: 0) 7 } 8

投稿2018/09/02 09:00

編集2018/09/02 09:56
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirokun823

2018/09/02 11:02 編集

回答ありがとうございます! 頂いた内容では動かなかったのですが、少し試行錯誤したら解決出来ました。 関数の()内を_ scroll → _ scrollViewに変えたところ、双方向に連動させることが出来ました。 //scrollViewの座標変更時の挙動 func scrollViewDidScroll(_ scrollView: UIScrollView) { if scrollView == scroll { scroll2.contentOffset = CGPoint(x: scroll.contentOffset.x , y: 0) } else if scrollView == scroll2{ scroll.contentOffset = CGPoint(x: scroll2.contentOffset.x , y: 0) } } また質問させて頂くかと思いますが、宜しくお願いします。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問