今日はここまで作ってみた
日の出と日の入はどう計算する?
- 「日の出 JavaScript」でググってみた。k-ichikawaさんありがとございます。参考にさせていただきます
- safariで「ページのソースを標示」して
関連JavaScriptを捜索しました
- 引き数jdは、1月1日からの通算日数
- tstaは日の出時間
- tendは日の入時間
Swiftに書き換える
- 引き数は2つで月と日にする
- 戻り値は2つで「日の出」と「日の入」にする
func calcB( m: Int, d1: Int) -> (Double, Double) { let del:Double let phi:Double 中略 t = acos(-tan(del)*tan(phi))*180/Double.pi //日の出 T = (-t + 180)/15; tsta = T - (lon - 135)/15.0 - ee //日の暮れ T = (t + 180)/15 tend = T - (lon - 135)/15.0 - ee return (tsta, tend) }
実装
- Viewに記載
- 月と日を取得
- calcB(m: month , d1: day)で日の出と日の入を取得
- 内周文字盤に「o」を表示
struct ContentView: View { 中略 var body: some** View { ZStack { ここに記載 //月日を取得 let calendar = Calendar(identifier: .gregorian) let date = Date() let month : Int = Int(calendar.component(.month, from: date)) let day: Int = Int(calendar.component(.day, from: date) ) //日の出、日の入時刻を求める let re = calcB(m: month , d1: day) edo_mojiban(angle: .degrees(dosu(v: re.0)), jikan: "o") edo_mojiban(angle: .degrees(dosu(v: re.1)), jikan: "o")
- 内周インデックス作成
- 前回は、外周にアラビア インデックスで24時間標示を作成しました。
- 今回は、内周に日の出と日の入を「o」で表示します
func edo_mojiban(angle: Angle, jikan : String ) -> some View{ edo_mojiban_sen(width: 4, height: 60) .fill(Color(red: 0.7, green: 0.8, blue: 0.9)) .frame(width: 12, height: 40) .offset(x: 6, y: 20) .overlay( Text(jikan) .rotationEffect( .degrees(0) - angle - .degrees(6) ) .font(.system(size: 20)) .foregroundColor(.red) .offset(x: -0, y: -46) ) .rotationEffect(angle + .degrees( 1.2)) } func edo_mojiban_sen(width: CGFloat, height: CGFloat) -> some Shape { Path { path in path.move(to: CGPoint(x: 0, y: -height*0.9)) path.addLine(to: CGPoint(x: -width/2, y: -height*0.9)) path.addLine(to: CGPoint(x: -2, y: -height)) path.addLine(to: CGPoint(x: 2, y: -height)) path.addLine(to: CGPoint(x: width/2, y: -height*0.9)) path.closeSubpath() } }
この後は(つづく)
- 今回は、内周に日の出と日の入を「o」で表示しました
次回は、内周にアラビア インデックスで和時計を表示します
そろそろ、AppleWatchのViewを調べなくては進まない
- Swiftも学習しないと進めないのでAmazonでクリックしました。感想は別途報告するね