We will entertain your mind, enhance your brain, expand your lifestyle.

TimelineViewの不可解な挙動

Periodeeでは経過時間表示画面で TimelineViewというSwiftUIのViewをしようしている。これは指定した間隔で内包するViewを更新してくれる。経過時間表示では1分単位で更新を指定している。

struct TimeKeepingView: View {
	@EnvironmentObject var myModel: SessionModel
	@Binding var session: Session
	var today:String
	var testingCurrentTime:String = ""

	var body: some View {
		//TimelineView(.everyMinute) { context in
		//TimelineView(EveryMinuteTimelineSchedule()) { context in
		TimelineView(.periodic(from: appStartDate, by: 60.0)) { context in
			GeometryReader { geometry in
				let gw = geometry.size.width
				let gh = geometry.size.height					
				ZStack {
					let cx = gw / 2
					let cy = gh / 2
					session.SetCurrentTime_Period(withTimeCode: context.date)

TimelineView内では、引数のcontextに格納されている dateを使用する必要があるのだが、このcontext.dateがおかしくなる。

アプリの起動時や、セッション切り替えで経過時間画面が再表示されると、複数回 TimelineViewが更新されてくるが、とあるタイミングで1秒以下の間隔で context.dateの時刻が数分ずれていく。そして突然正しい時刻に戻る。

新機能で Hapticによる通知を組み込んだことで、上記の挙動が露見した。しかもシミュレータでは発生せず、Apple Watch上でないと発生しない。

TimelineViewの指定方法を変えてみたが、効果は無く継続して調査中。