作業7#91 自訂 controller 類別和利用 viewDidLoad 客製 App 畫面

運用了

  1. 利用 CAGradientLayer 製作漸層
  2. 利用 mask 設計特別形狀的圖片
  3. 使用 SwiftUI 的 live preview 即時預覽 CAEmitterLayer&製作下雪動畫
  4. 播放背景音樂
import SwiftUI
import UIKit
import AVFoundation
class ViewController: UIViewController {
//播放音樂的播放器
let player = AVPlayer()

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view
//漸層背景
let gradientLayer = CAGradientLayer()
gradientLayer.frame = CGRect(x: 0, y: 0, width: 414, height: 896)
gradientLayer.colors = [
CGColor(red: 197/255, green: 227/255, blue: 215/255, alpha: 1),
CGColor(red: 139/255, green: 220/255, blue: 215/255, alpha: 1),
CGColor(red: 255/255, green: 154/255, blue: 168/255, alpha: 1),
CGColor(red: 255/255, green: 119/255, blue: 105/255, alpha: 1)
]
view.layer.addSublayer(gradientLayer)

//聖誕樹
let christmasTreeImage = UIImageView(frame: CGRect(x: 10, y: 200, width: 399, height: 499))
view.addSubview(christmasTreeImage)
let animatedImage = UIImage.animatedImageNamed("christmas-tree-christmas-decorations-", duration: 1)
christmasTreeImage.image = animatedImage

//字
let messageLabel = UILabel(frame: CGRect(x: 30, y: 750, width: 400, height: 50))
messageLabel.text = "Merry Chrismas"
messageLabel.font = UIFont.boldSystemFont(ofSize: 50)
messageLabel.textColor = UIColor(red: 0/255, green: 136/255, blue: 168/255, alpha: 1)
view.addSubview(messageLabel)

//雪花動畫
let snowEmitterCell = CAEmitterCell()
snowEmitterCell.contents = UIImage(named: "snow")?.cgImage
snowEmitterCell.birthRate = 2
snowEmitterCell.lifetime = 15
snowEmitterCell.velocity = 100
snowEmitterCell.scale = 0.5
snowEmitterCell.scaleRange = 0.3
snowEmitterCell.spin = 0.5
snowEmitterCell.spinRange = 1
snowEmitterCell.yAcceleration = 30
snowEmitterCell.emissionRange = CGFloat.pi

let snowEmitterLayer = CAEmitterLayer()
snowEmitterLayer.emitterCells = [snowEmitterCell]
snowEmitterLayer.emitterPosition = CGPoint(x: 200, y: 0)
snowEmitterLayer.emitterSize = CGSize(width: 414, height: 896)
snowEmitterLayer.emitterShape = .line
view.layer.addSublayer(snowEmitterLayer)

//星星動畫
let starEmitterCell = CAEmitterCell()
starEmitterCell.contents = UIImage(named: "star")?.cgImage
starEmitterCell.birthRate = 5
starEmitterCell.lifetime = 2
starEmitterCell.velocity = 50
starEmitterCell.scale = 0.5
starEmitterCell.scaleRange = 0.2
starEmitterCell.yAcceleration = 30
let starEmitterCellLayer = CAEmitterLayer()
starEmitterCellLayer.emitterCells = [starEmitterCell]
starEmitterCellLayer.emitterPosition = CGPoint(x: 0, y: 100)
starEmitterCellLayer.emitterSize = CGSize(width: 800, height: 300)
starEmitterCellLayer.emitterShape = .line
view.layer.addSublayer(starEmitterCellLayer)

//樹星
let treeStarImage = UIImage(named: "treestar")
let treeStarImageView = UIImageView(image: treeStarImage)
treeStarImageView.frame = CGRect(x: 175, y: 165, width: 64, height: 64)
let treeStarBackImage = UIImage(named: "treestarback")
let treeStarBackImageView = UIImageView(image: treeStarBackImage)
treeStarBackImageView.frame = treeStarImageView.frame
treeStarImageView.frame.origin = .zero
treeStarBackImageView.mask = treeStarImageView
view.addSubview(treeStarBackImageView)

//音樂
let fileUrl = Bundle.main.url(forResource: "LastChristmas", withExtension: "mp3")!
let playerItem = AVPlayerItem(url: fileUrl)
player.replaceCurrentItem(with: playerItem)
player.play()
player.pause()





}
}
struct ViewControllerView: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> ViewController {
ViewController()
}

func updateUIViewController(_ uiViewController: ViewController, context: Context) {
}

typealias UIViewControllerType = ViewController


}
struct ViewController_Previews: PreviewProvider {
static var previews: some View {
ViewControllerView()
}
}

--

--