Membuat pengalaman yang holistik dan terintegrasi membutuhkan sebuah tema. Mengubah Warna semua tampilan untuk mendukung tema adalah proses yang sangat sibuk. Untuk menghindari duplikasi kode, kami menggunakan Properti tintColor. Di SwiftUI warna rona ini diubah namanya menjadi aksenColor. Dalam tutorial ini, kita akan mempelajari keduanya.

warnaWarna UIKit

  • Di UIKit tintColor merefleksikan semua kontrol (seperti: Button Slider dll) bersama dengan Templet Image
  • Warna rona yang disetel ke induk akan disebarkan ke semua turunannya. Jika tampilan turunan ingin mengganti rona tersebut. itu dapat mengatur warna yang berbeda.
class ViewController: UIViewController {
 @IBOutlet weak var image: UIImageView! //UIImageView have templet image
 @IBOutlet weak var button2: UIButton!
 @IBOutlet weak var button1: UIButton!
 override func viewDidLoad() {
    super.viewDidLoad()
    button1.tintColor = .green
    self.view.tintColor = .red // parent tint
 }
}

  • Warna Globaldapat diatur sehingga semua kontrol (tombol, penggeser, gambar kuil, dll) memiliki warna yang sama di seluruh Layar.

Menggunakan Kode, Setel warna ke jendela:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

        func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
       

        guard let windowScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(frame: windowScene.coordinateSpace.bounds)
        window?.windowScene = windowScene

        window?.tintColor = UIColor.green //set global tint
    }
}

aksenWarna SwiftUI

Perilaku aksenColor sama persis dengan SwiftUI tetapi tidak berfungsi pada Gambar.

import SwiftUI

struct ContentView: View {
    @State private var showSwitch   = true
    @State private var temp: Double = 0

    var body: some View {
        VStack(spacing: 10){
            Button("Button") {

            }.padding()

            Image.init("star").padding()

            Image.init(systemName: "heart").foregroundColor(.blue).colorMultiply(.red).padding() //accentColor does not affect Image
            Slider(value: $temp, in: -100...100, step: 1) //Works

            //overrride parent accentColor
            Button("Button2") {

            }.accentColor(.blue).padding()
        }.accentColor(.red)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Menetapkan tema Global:

Ubah tampilan pertama seperti berikut agar terlihat di seluruh aplikasi:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow ?


      //set theme here 
        let contentView = ContentView().accentColor(.red)

        // Use a UIHostingController as window root view controller.
        if let windowScene = scene as ? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: contentView)
            self.window = window
            window.makeKeyAndVisible()
        }
    }
}
  • Perhatikankarena tampilan tidak pernah berjalan dengan ContentView_Previews. Warna pada kanvas tidak akan memantul. Untuk membuat warna mencerminkan pada kanvas, perbarui aksenColor ContentView_Previews.