前提・実現したいこと
テーブルを使用してセルをタップした際の処理に、
スライダーの値を更新するコードと、スライダーの値に応じてViewを描画するコードを書いています。
しかし、実際にセルをタップしてみると、タップする前のスライダーの値からViewを描画してしまいます。
現在の流れとしては、
①→cell1をタップ
②→(スライダーの値はcellの中に含まれている値が反映されている)
③→タップ時のスライダー位置(sPositionSliderとePositionSlider)からカスタムviewが描画
④→スライダーの位置が変更(cellに含まれている値)
③、④の処理の順番がどうしても入れ替えられません。
質問としては、「デリゲートメソッドの処理を終わらせた後に任意のメソッドを実行したい」としています。しかし、質問の方法でやりたいことが実現できるかどうかの判断がついていないので、
できれば実現したいことを踏まえて何かわかる方がいらしたら回答よろしくお願いします。
該当のソースコード
swift
1 2struct Info{ 3 let sPosition: Float 4 let ePosition: Float 5} 6 7 @IBOutlet weak var sPositionSlider: UISlider! 8 @IBOutlet weak var ePositionSlider: UISlider! 9 var sPoint: CGPoint = CGPoint.zero 10 var ePoint: CGPoint = CGPoint.zero 11 var infos = [Info]() 12//infosの中にスライダーのデータが入っている。ex)infos[0].sPosition = 0.61, infos[0].ePosition = 0.83 13 14 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 15 print("tapped") 16//スライダーの値を更新 17 sPositionSlider.value = infos[indexPath.row].sPosition 18 ePositionSlider.value = infos[indexPath.row].ePosition 19// print(sPositionSlider.value)→変更後になっている。 20 updateDrawPosition() 21//sPointからePointまでの範囲に色をつけて返す処理 22 fillColorView.fillColor(sP: sPoint, eP: ePoint) 23 } 24 25 26 27//更新されたスライダーの値を取得してCGPoint型の値を代入 28 func updateDrawPosition() { 29//print(sPositionSlider.value)→変更後になっている。 30//値は変更されているが位置が変更されていないから思った通りにならない? 31 sPoint= getPosition(sPositionSlider) 32 ePoint = getPosition(ePositionSlider) 33 } 34 35//スライダーの値をCGPoint型で返す 36 func getPosition(_ slider:UISlider)->CGPoint{ 37 for i in slider.subviews { 38 if i is UIImageView { 39 let point = self.view.convert(i.center, from: slider) 40 return point 41 } 42 } 43 return CGPoint.zero 44 } 45
補足情報(FW/ツールのバージョンなど)
Swift 5
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/25 14:54