Swift学习

SwiftUI框架解析(二) —— 基于SwiftUI的一个简单

2019-06-14  本文已影响10人  刀客传奇

版本记录

版本号 时间
V1.0 2019.06.14 星期五

前言

SwiftUI是2019年WWDC新推出的UI相关的API,相信大家都已经知道并想体验一下,下面我们就去一起了解和学习了。感兴趣的可以看下面几篇文章。
1. SwiftUI框架解析(一) —— 基于SwiftUI的一个简单示例(一)

源码

首先看下工程文件组织结构

下面就是代码了

1. SceneDelegate.swift
  func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).

    // Use a UIHostingController as window root view controller
    let window = UIWindow(frame: UIScreen.main.bounds)
    window.rootViewController = UIHostingController(rootView: ContentView(rGuess: 0.5, gGuess: 0.5, bGuess: 0.5))
    self.window = window
    window.makeKeyAndVisible()
  }
2. ContentView.swift
import SwiftUI

struct ContentView: View {
  let rTarget = Double.random(in: 0..<1)
  let gTarget = Double.random(in: 0..<1)
  let bTarget = Double.random(in: 0..<1)
  @State var rGuess: Double
  @State var gGuess: Double
  @State var bGuess: Double
  @State var showAlert = false

  func computeScore() -> Int {
    let rDiff = rGuess - rTarget
    let gDiff = gGuess - gTarget
    let bDiff = bGuess - bTarget
    let diff = sqrt(rDiff * rDiff + gDiff * gDiff + bDiff * bDiff)
    return Int((1.0 - diff) * 100.0 + 0.5)
  }

  var body: some View {
    VStack {
      HStack {
        // Target color block
        VStack {
          Rectangle()
            .foregroundColor(Color(red: rTarget, green: gTarget, blue: bTarget, opacity: 1.0))
          Text("Match this color")
        }
        // Guess color block
        VStack {
          Rectangle()
            .foregroundColor(Color(red: rGuess, green: gGuess, blue: bGuess, opacity: 1.0))
          HStack {
            Text("R: \(Int(rGuess * 255.0))")
            Text("G: \(Int(gGuess * 255.0))")
            Text("B: \(Int(bGuess * 255.0))")
          }
        }
      }

      Button(action: {
        self.showAlert = true
      }) {
        Text("Hit Me!")
      }
      .presentation($showAlert) {
        Alert(title: Text("Your Score"), message: Text("\(computeScore())"))
      }

      VStack {
        ColorSlider(value: $rGuess, textColor: .red)
        ColorSlider(value: $gGuess, textColor: .green)
        ColorSlider(value: $bGuess, textColor: .blue)
      }
    }
  }
}

#if DEBUG
struct ContentView_Previews : PreviewProvider {
  static var previews: some View {
    ContentView(rGuess: 0.5, gGuess: 0.5, bGuess: 0.5)
  }
}
#endif

struct ColorSlider : View {
  @Binding var value: Double
  var textColor: Color
  var body: some View {
    return HStack {
      Text("0")
        .color(textColor)
      Slider(value: $value, from: 0.0, through: 1.0)
      Text("255")
        .color(textColor)
    }
    .padding()
  }
}

后记

本篇主要讲述了SwiftUI相关,感兴趣的给个赞或者关注~~~

上一篇下一篇

猜你喜欢

热点阅读