🎧

レコードをつくってみる

2024/09/11に公開

完成

コード

VinylRecord.swift
struct ContentView25: View {
  @State private var rotation: Double = 0.0
  let labelText: String
  
  init(labelText: String = "YOUR LABEL") {
    self.labelText = labelText
  }
  
  var body: some View {
    ZStack {
      // レコード本体
      Circle()
        .fill(Color.black)
        .shadow(color: .gray, radius: 10, x: 0, y: 5)
      
      // レコードの溝
      ForEach(0..<50) { i in
        Circle()
          .stroke(Color.gray.opacity(0.2), lineWidth: 3.0)
          .scaleEffect(CGFloat(50 - i) / 50)
      }
      
      // レコードのレーベル
      Circle()
        .fill(Color.red)
        .scaleEffect(0.3)
      
      // レーベルのテキスト
      Text(labelText)
        .font(.system(size: 12))
        .fontWeight(.bold)
        .foregroundColor(.white)
        .frame(width: 80)
        .rotationEffect(.degrees(-rotation))
      
      // 中心の穴
      Circle()
        .fill(Color.white)
        .scaleEffect(0.05)
    }
    .frame(width: 300, height: 300)

    // レコードの回転
    .rotationEffect(.degrees(0))
    .onAppear {
      withAnimation(Animation.linear(duration: 5).repeatForever(autoreverses: false)) {
        rotation = 360
      }
    }
  }
}

#Preview {
  VStack {
    ContentView25(labelText: "CLASSIC HITS")
    Text("Now Playing")
      .font(.title)
      .padding()
  }
}

まとめ

レコードが回転する模様をつくることができました。
リッチなSpotifyを作りたいと考えているので、一つ前進しました。

GitHubで編集を提案

Discussion