teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

追記2

2017/08/20 08:20

投稿

mitci
mitci

スコア37

title CHANGED
File without changes
body CHANGED
@@ -55,7 +55,10 @@
55
55
  }
56
56
  ```
57
57
 
58
- ですが、あくまでも **タイムラグが少なくなった** ということで根本の解決にはなっていない気がします・・・実際、チェックしてみるとぎりぎり目測のできる範疇でのタイムラグがあります。本当にぎりぎり、気にしなくてもいいのでは、という範疇ですが・・・
58
+ ですが、あくまでも **タイムラグが少なくなった** ということで根本の解決にはなっていない気がします・・・
59
+ timerを0.001秒にし、上記コードにしても、
60
+ ごくわずかなズレは残り、また、他のアプリなどを起動し、端末に負担がかかっているときはよりズレて表示されているような気がします・・・
61
+
59
62
  どうかもう一度、お力添えをお願いいたします・・・
60
63
 
61
64
  ###再考察

1

再考察・・・

2017/08/20 08:20

投稿

mitci
mitci

スコア37

title CHANGED
File without changes
body CHANGED
@@ -36,5 +36,33 @@
36
36
  ``timer``の``timeInterval``引数を``0.1``や``0.01``としても変わりませんでした。
37
37
  実際の処理でタイムラグが発生しているように思えます。
38
38
 
39
+ ###追記
40
+ 2017.8.20
41
+ 再生時間と同期しているか、というチェックの方法はアプリの画面を起動し、上にコントロールセンターのオーディオコントロールの画面を表示してチェックしています。
42
+ そのため、iOSのシステム的には小数点以下を切り捨てにして表示していると思うので、
43
+ ``Int(player.currentPlaybackTime)``として切り捨てても問題ないのでは、と考えました。
44
+ また、剰余計算に``truncatingRemainder(dividingBy: 60)``や``sec - (sec / 60) * 60``を使っても、``mm:ss``のString型にする方法がわからず・・・
45
+ 無理に代入すると``01:14532...``という形になってしまいました・・・
46
+
47
+ ---
48
+ 現時点では一度``count``に``player.currentPlaybackTime``代入せず、直接``Int()``内に入れることでタイムラグがほぼ解消しました。
49
+ ```swift
50
+ if player.nowPlayingItem != nil {
51
+ let min = Int(player.currentPlaybackTime) / 60
52
+ let sec = Int(player.currentPlaybackTime.truncatingRemainder(dividingBy: 60))
53
+ //let sec = Int(player.currentPlaybackTime) % 60よりもなぜかラグが少ないです。
54
+ timeLabel.text = String(format: "%02d:%02d", min, sec)
55
+ }
56
+ ```
57
+
58
+ ですが、あくまでも **タイムラグが少なくなった** ということで根本の解決にはなっていない気がします・・・実際、チェックしてみるとぎりぎり目測のできる範疇でのタイムラグがあります。本当にぎりぎり、気にしなくてもいいのでは、という範疇ですが・・・
59
+ どうかもう一度、お力添えをお願いいたします・・・
60
+
61
+ ###再考察
62
+ ``String(format:)``の形にも慣れていないので、そこでも問題があるのだろうか、とも考えています。
63
+ ```swift
64
+ timeLabel.text = String(format: "%02d:%02d", Int(min), Int(sec))
65
+ ```
66
+ としても、ラグはあったのですが・・・。
39
67
  ###補足情報(言語/FW/ツール等のバージョンなど)
40
68
  swift3 xcode8