Table View(Collection View)に関することでご助言頂けますと幸いです。
●実現したいこと:
Collection Viewにて、現在表示されているセルのindex番号を取得したいです。
●試したこと:
カスタムクラスは合計で7個のセルが入っており、1画面に1セルしか表示させない作りになっています。
[will display cell]を使って上記の実現したいことを実施しようとしました。
Swift
1 func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { 2 3 4 5 if let cell = cell as? ImageCollectionViewCell { 6 7 self.visibleIndexNumber = indexPath.row //別箇所で使用 8 } 9 10 print(indexPath.row) 11 12 }
●問題:
Collection Viewで左から右に向かって順番にスクロールしていくと、
print(indexPath.row)の出力も0から始まって1ずつ増えていき、最後は6が出力され、やりたいことが実現できています。ですが、そのあと左に向かってスクロールして戻っていくと、途中で一気に2つ分戻ったりします。
◇パターン1
・右に向かうとき:0,1,2,3,4,5,6
・左に戻るとき :6,4,3,2,1,0,0
◇パターン2
・右に向かうとき:0,1,2,3
.左に戻るとき :3,1,0,0
必ず、最初に戻るタイミングで、1個分のセルしか戻っていないにもかからわず、
indexPath.rowの出力は2個分マイナスされてしまいます。
以上になります。お手数ですが、お力添え頂けますと幸いです。。。
よろしくお願いいたします。
★以下補足★
indexPathの使用目的を記載します。
スマホを耳元に持ってきた時に(iPhone上部の近接センサーが反応した時に)、
現在表示されているセル内の音源を自動再生させたいです。
そのため、取得したindexPathが配列内で何番目に当たるかを知る必要があります。。。!
Swift
1 2 @objc func proximitySensorStateChanged(){ 3 4 5 if (UIDevice.current.proximityState == true) { 6 7 let message = messages[self.visibleIndexNumber] 8 9 let audioUrl = URL(string: message.url!) 10 URLSession.shared.dataTask(with: audioUrl!, completionHandler: { (data, response, error) in 11 12 DispatchQueue.global().async{ 13 DispatchQueue.main.async{ 14 15 do { 16 self.audioPlayer = try AVAudioPlayer(data:data!) 17 self.audioPlayer.delegate = self 18 self.audioPlayer.play() 19 } 20 21 catch{} 22 } 23 } 24 25 }).resume() 26 27 } catch { 28 29 } 30 31 } else { 32 33 } 34 35 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/01 13:23
2019/06/01 15:27
退会済みユーザー
2019/06/01 16:23
2019/06/02 07:33
退会済みユーザー
2019/06/03 04:45 編集
2019/06/09 07:00