今日はここまで作ってみた

日の出と日の入はどう計算する?
- 「日の出 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でクリックしました。感想は別途報告するね
![[増補改訂第3版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 WEB+DB PRESS plus [増補改訂第3版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 WEB+DB PRESS plus](https://m.media-amazon.com/images/I/51iY70Z3fKL._SL500_.jpg)