描画とアニメーション

ビューと移行のアニメーション




訳注:以下、必要な場所においては Mac と iPhone 両方のセクションを提供しています。
Mac → セクション 5、iPhone → セクション 105 とします。









プレビュー その 1



    HikeGraph.swift


  1. import SwiftUI
  2. extension Animation {
  3. static func ripple() -> Animation {
  4. Animation.default
  5. }
  6. }
  7. struct HikeGraph: View {
  8. var hike: Hike
  9. var path: KeyPath<Hike.Observation, Range<Double>>
  10. var color: Color {
  11. switch path {
  12. case \.elevation:
  13. return .gray
  14. case \.heartRate:
  15. return Color(hue: 0, saturation: 0.5, brightness: 0.7)
  16. case \.pace:
  17. return Color(hue: 0.7, saturation: 0.4, brightness: 0.7)
  18. default:
  19. return .black
  20. }
  21. }
  22. var body: some View {
  23. let data = hike.observations
  24. let overallRange = rangeOfRanges(data.lazy.map { $0[keyPath: path] })
  25. let maxMagnitude = data.map { magnitude(of: $0[keyPath: path]) }.max()!
  26. let heightRatio = 1 - CGFloat(maxMagnitude / magnitude(of: overallRange))
  27. return GeometryReader { proxy in
  28. HStack(alignment: .bottom, spacing: proxy.size.width / 120) {
  29. ForEach(Array(data.enumerated()), id: \.offset) { index, observation in
  30. GraphCapsule(
  31. index: index,
  32. height: proxy.size.height,
  33. range: observation[keyPath: path],
  34. overallRange: overallRange)
  35. .colorMultiply(color)
  36. .transition(.slide)
  37. .animation(.ripple())
  38. }
  39. .offset(x: 0, y: proxy.size.height * heightRatio)
  40. }
  41. }
  42. }
  43. }



上記の 5 行目を以下のように書き換えます。


    HikeGraph.swift


  1. extension Animation {
  2. static func ripple() -> Animation {
  3. Animation.spring(dampingFraction: 0.5)
  4. }
  5. }



上記の 5 行目の後に以下のように書き加えます。


    HikeGraph.swift


  1. static func ripple() -> Animation {
  2. Animation.spring(dampingFraction: 0.5)
  3. .speed(2)
  4. }
  5. }



上記の 4 行目以降、及び 43 行目を 以下のように書き足します。


    HikeGraph.swift


  1. extension Animation {
  2. static func ripple(index: Int) -> Animation {
  3. Animation.spring(dampingFraction: 0.5)
  4. .speed(2)
  5. .delay(0.03 * Double(index))
  6. }
  7. }




  1. .colorMultiply(color)
  2. .transition(.slide)
  3. .animation(.ripple(index: index))
  4. }
  5. .offset(x: 0, y: proxy.size.height * heightRatio)


(注:上記 7 行目を書き足しているため行番号が 1 つずれています。)






セクション 1セクション 2セクション 3
セクション 4セクション 5
セクション 101セクション 102セクション 103
セクション 104セクション 105






目次
Xcode の新機能

フレームワーク

  • SwiftUI

  • ビューの作成と結合

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5

    セクション 6


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    セクション 106

    ビルドリストとナビゲーション

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5

    セクション 6

    セクション 7

    セクション 8


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    セクション 106

    セクション 107

    セクション 108

    ユーザー入力の処理

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5

    セクション 6


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    セクション 106

    パスとシェイプの描画

    セクション 1

    セクション 2

    セクション 3

    セクション 4


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    ビューと移行のアニメーション

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    複雑なインターフェースの構成

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    UI コントロールを扱う

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    UIKit とのインターフェース

    セクション 1

    セクション 2

    セクション 3

    セクション 4


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    watchOS アプリの作成

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    macOS アプリの作成

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5

    セクション 6

    セクション 7


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    セクション 106

    セクション 107