ViewDidLoad (把音樂加進去)
Published in
9 min readJun 12, 2022
練習以下功能:
- 建立漸層圖層與遮照
- 播放背景音樂
- 利用 CAEmitterLayer製做食物雨動畫
素材如下:
先來把素材去背…去背的方式如下:
其中之一的過程如下“
去背後…設定好名字;來看一下去背後的KFC_Logo的背景參數:
查詢顏色的RGB:
https://yangcha.github.io/iview/iview.html
查看底色
將影片加到 Xcode 專案
之前要先處理影片的方式其中之一:
更多方式如:
拖拉音樂進去….
比方音樂檔是 .mp3,將它拖曳到專案的 Project navigator 裡
(記得 copy items & Add to targets 要勾選)
快速動畫:
技能:
這次就先加上 音樂
import UIKitimport AVFoundationimport MediaPlayer
先把Logo設定好:
let imageView = UIImageView (frame: CGRect(x: 40, y: 200, width: 600, height: 180))imageView.image = UIImage(named: "1.KFC_Logo_backMak")
//圖片的名字
接下來讓他轉換用CGAffineTransform 的功能:
圖片變形=轉換所得到的測量尺寸(x: 1.5, y: 1.5)
imageView.transform = CGAffineTransform.identity.scaledBy(x: 1.5, y: 1.5)
視覺固定外觀固定常數!
let kfcView = UIView (frame: imageView.frame)
開始在Logo上面做CAGradientLayer 製作漸層
漸層的顏色調整:
let gradientLayer = CAGradientLayer()gradientLayer.frame = kfcView.frame
// 要給漸層框架後才能部署顏色gradientLayer.colors = [UIColor(red: 196/255, green: 18/255, blue: 47/255, alpha: 1.0).cgColor, UIColor.yellow.cgColor]
再把顏色加進去…
kfcView.layer.addSublayer(gradientLayer)kfcView.mask = imageView
// 去做遮蓋view.addSubview(kfcView)
//幾上去遮蓋到(kfcView)view.backgroundColor = .darkGray
//再去設定Logo上面的灰黑色
之前有手動加入音樂…,現在用程式的方式顯現:
//voice , soundlet fileURL = Bundle.main.url(forResource: "Andy_neverGiveUp",withExtension: "mp3")!let playItem = AVPlayerItem(url: fileURL)player.replaceCurrentItem(with: playItem)player.play()let volumeView = MPVolumeView(frame: CGRect(x: 10, y: 750, width: 300, height: 50))view.addSubview(volumeView)
開始部署圖片你要掉落的景像:
//nuglet nugCell = CAEmitterCell()nugCell.contents = UIImage(named: "2Nug_deMask")?.cgImagenugCell.birthRate = 1.5nugCell.lifetime = 30nugCell.velocity = 300nugCell.yAcceleration = 50nugCell.scale = 0.3nugCell.spin = 0.5nugCell.spinRange = 3nugCell.emissionRange = CGFloat.pi
接下來也是:
//CKlet legCell = CAEmitterCell()legCell.contents = UIImage(named: "3.Leg_deMask")?.cgImagelegCell.birthRate = 0.5 // 產生的平率legCell.lifetime = 30 // 生命週期legCell.velocity = 150 // 運轉速度legCell.yAcceleration = 40 // y方向的速度legCell.scale = 0.2 // 縮放比例legCell.spin = 0.7 // 自己旋轉速度legCell.spinRange = 2 // 旋轉角度範圍legCell.emissionRange = CGFloat.pi
再加入要發射的速度和方向:
//4slet sCell = CAEmitterCell()sCell.contents = UIImage(named: "4s")?.cgImagesCell.birthRate = 0.5 // 產生(倍數)頻率,默認1.0sCell.lifetime = 30 // 生命週期係數, 默認1.0sCell.velocity = 300 // 基本速度係數(運轉速度), 默認1.0sCell.yAcceleration = 50 // y方向的加速度sCell.scale = 0.2 // 縮放比例係數, 默認1.0sCell.spin = 0.7 // 自旋轉速度係數, 默認1.0sCell.spinRange = 2 // 旋轉角度範圍sCell.alphaSpeed = 2 // 透明度在生命周期内的改变速度
再加入瀑布要下去的速度和方向:
//foodfallinglet foodpool = CAEmitterLayer()foodpool.emitterCells = [nugCell,legCell,sCell]foodpool.emitterPosition = CGPoint(x: view.bounds.width/2, y: -50)foodpool.emitterSize = CGSize(width: view.bounds.width, height: 0)foodpool.emitterShape = .lineview.layer.addSublayer(foodpool)view.backgroundColor = .clear
參考功能:
關於Bundle (AVplayer()):
關於音效如何變魔術:
參考作品: