37
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SwiftUIでいのちを輝かせる

Last updated at Posted at 2020-08-30

SwiftUIで大阪万博のいのちの輝き君を作成してみました。

※ 色はシステムカラーを使用しているため、本来の色とは異なります。

1. 赤い背景を作成

import SwiftUI

struct ContentView: View {
    var body: some View {
        GeometryReader { geometry in
            ZStack {
                inochiRed.frame(width: geometry.size.width,
                                height: geometry.size.width,
                                alignment: .center)
            }
        }
    }
    
    var inochiRed: some View {
        GeometryReader { geometry in
            Group {
                Ellipse()
                    .fill(Color.red)
                    .frame(width: geometry.size.width * 0.21,
                           height: geometry.size.height * 0.21,
                           alignment: .center)
                    .position(x: geometry.size.width * 0.43,
                              y: geometry.size.width * 0.124)
                Ellipse()
                    .fill(Color.red)
                    .frame(width: geometry.size.width * 0.20,
                           height: geometry.size.height * 0.20,
                           alignment: .center)
                    .position(x: geometry.size.width * 0.296,
                              y: geometry.size.width * 0.231)
                Ellipse()
                    .fill(Color.red)
                    .frame(width: geometry.size.width * 0.20,
                           height: geometry.size.height * 0.20,
                           alignment: .center)
                    .position(x: geometry.size.width * 0.135,
                              y: geometry.size.width * 0.328)
                Ellipse()
                    .fill(Color.red)
                    .frame(width: geometry.size.width * 0.19,
                           height: geometry.size.height * 0.19,
                           alignment: .center)
                    .position(x: geometry.size.width * 0.273,
                              y: geometry.size.width * 0.390)
                Ellipse()
                    .fill(Color.red)
                    .frame(width: geometry.size.width * 0.25,
                           height: geometry.size.height * 0.25,
                           alignment: .center)
                    .position(x: geometry.size.width * 0.169,
                              y: geometry.size.width * 0.529)
            }
            Group {
                Ellipse()
                    .fill(Color.red)
                    .frame(width: geometry.size.width * 0.12,
                           height: geometry.size.height * 0.22,
                           alignment: .center)
                    .position(x: geometry.size.width * 0.255,
                              y: geometry.size.width * 0.685)
                Ellipse()
                    .fill(Color.red)
                    .frame(width: geometry.size.width * 0.18,
                           height: geometry.size.height * 0.18,
                           alignment: .center)
                    .position(x: geometry.size.width * 0.347,
                              y: geometry.size.width * 0.819)
                Ellipse()
                    .fill(Color.red)
                    .frame(width: geometry.size.width * 0.27,
                           height: geometry.size.height * 0.27,
                           alignment: .center)
                    .position(x: geometry.size.width * 0.535,
                              y: geometry.size.width * 0.849)
                Ellipse()
                    .fill(Color.red)
                    .frame(width: geometry.size.width * 0.30,
                           height: geometry.size.height * 0.25,
                           alignment: .center)
                    .position(x: geometry.size.width * 0.714,
                              y: geometry.size.width * 0.695)
                Ellipse()
                    .fill(Color.red)
                    .frame(width: geometry.size.width * 0.19,
                           height: geometry.size.height * 0.30,
                           alignment: .center)
                    .position(x: geometry.size.width * 0.729,
                              y: geometry.size.width * 0.477)
                Ellipse()
                    .fill(Color.red)
                    .frame(width: geometry.size.width * 0.30,
                           height: geometry.size.height * 0.15,
                           alignment: .center)
                    .position(x: geometry.size.width * 0.753,
                              y: geometry.size.width * 0.327)
                Ellipse()
                    .fill(Color.red)
                    .frame(width: geometry.size.width * 0.28,
                           height: geometry.size.height * 0.28,
                           alignment: .center)
                    .position(x: geometry.size.width * 0.653,
                              y: geometry.size.width * 0.165)
            }
        }
    }
}

Simulator Screen Shot - iPhone 11 - 2020-08-29 at 16.28.58.png

2. 白い目を作成

    var body: some View {
        GeometryReader { geometry in
            ZStack {
                inochiRed.frame(width: geometry.size.width,
                                height: geometry.size.width,
                                alignment: .center)
                inochiWhite.frame(width: geometry.size.width,
                                height: geometry.size.width,
                                alignment: .center)
            }
        }
    }

    var inochiWhite: some View {
        GeometryReader { geometry in
            Ellipse()
                .fill(Color.white)
                .frame(width: geometry.size.width * 0.09,
                       height: geometry.size.height * 0.09,
                       alignment: .center)
                .position(x: geometry.size.width * 0.105,
                          y: geometry.size.width * 0.310)
            Ellipse()
                .fill(Color.white)
                .frame(width: geometry.size.width * 0.10,
                       height: geometry.size.height * 0.10,
                       alignment: .center
                .position(x: geometry.size.width * 0.197,
                          y: geometry.size.width * 0.551)
            Ellipse()
                .fill(Color.white)
                .frame(width: geometry.size.width * 0.085,
                       height: geometry.size.height * 0.085,
                       alignment: .center)
                .position(x: geometry.size.width * 0.520,
                          y: geometry.size.width * 0.900)
            Ellipse()
                .fill(Color.white)
                .frame(width: geometry.size.width * 0.135,
                       height: geometry.size.height * 0.120,
                       alignment: .center)
                .position(x: geometry.size.width * 0.773,
                          y: geometry.size.width * 0.713)
            Ellipse()
                .fill(Color.white)
                .frame(width: geometry.size.width * 0.11,
                       height: geometry.size.height * 0.11,
                       alignment: .center)
                .position(x: geometry.size.width * 0.685,
                          y: geometry.size.width * 0.105)
        }
    }

Simulator Screen Shot - iPhone 11 - 2020-08-29 at 16.30.32.png

3.青い目を作成

    var body: some View {
        GeometryReader { geometry in
            ZStack {
                inochiRed.frame(width: geometry.size.width,
                                height: geometry.size.width,
                                alignment: .center)
                inochiWhite.frame(width: geometry.size.width,
                                height: geometry.size.width,
                                alignment: .center)
                inochiBlue.frame(width: geometry.size.width,
                                height: geometry.size.width,
                                alignment: .center)
            }
        }
    }

    var inochiBlue: some View {
        GeometryReader { geometry in
            Ellipse()
                .fill(Color.blue)
                .frame(width: geometry.size.width * 0.045,
                       height: geometry.size.height * 0.045,
                       alignment: .center)
                .position(x: geometry.size.width * 0.085,
                          y: geometry.size.width * 0.30)
            Ellipse()
                .fill(Color.blue)
                .frame(width: geometry.size.width * 0.045,
                       height: geometry.size.height * 0.045,
                       alignment: .center)
                .position(x: geometry.size.width * 0.193,
                          y: geometry.size.width * 0.522)
            Ellipse()
                .fill(Color.blue)
                .frame(width: geometry.size.width * 0.040,
                       height: geometry.size.height * 0.040,
                       alignment: .center)
                .position(x: geometry.size.width * 0.520,
                          y: geometry.size.width * 0.923)
            Ellipse()
                .fill(Color.blue)
                .frame(width: geometry.size.width * 0.050,
                       height: geometry.size.height * 0.050,
                       alignment: .center)
                .position(x: geometry.size.width * 0.812,
                          y: geometry.size.width * 0.700)
            Ellipse()
                .fill(Color.blue)
                .frame(width: geometry.size.width * 0.050,
                       height: geometry.size.height * 0.050,
                       alignment: .center)
                .position(x: geometry.size.width * 0.705,
                          y: geometry.size.width * 0.080)
        }
    }

完成!! 

Simulator Screen Shot - iPhone 11 - 2020-08-29 at 16.36.06.png

## 参考

37
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?