Merry Christmas Tree
Published in
5 min readDec 17, 2022
天氣越來越冷,又到了年底耶誕節的慶典氛圍,今年女友一直想買耶誕樹。
以前旅居北美時,都是砍一棵樹回家,佈置起來就很漂亮
可是在台灣這幾乎是天方夜譚
因此,只好自己做一棵會動的,比較有Fu~
可以擺在電腦桌面一角,陪伴度過耶誕節
架構很簡單,就是一個手機wall paper塞進Image View,尺寸設定跟手機螢幕一樣大,然後掛上下雪的特效
研究了一下用CAEmitter感覺要寫好多程式,再去砍一棵樹好像比較快…
後來發現有一個方便的模組spriteKit 直接調參數就可以了~
先生成一個特效檔案~ 從xcode打開一個new file 然後選擇SpriteKit Particle File
然後就會生成一個sks的檔案,點進去可以看到特效樣式,右邊可以設定選項,像是雪花大小範圍、速度、持續時間…等等
下雪的寒冷冬夜,需要點歌聲來溫暖一下,所以再加上AVFoundation套件
這首歌還蠻溫暖的,記得擺在專案資料夾底下
先載入需要的套件:
import UIKit
import SpriteKit
import AVFoundation
定義型別,然後把屬性和方法寫進viewDidLoad,先處理音樂的部分:
var looper: AVPlayerLooper?
override func viewDidLoad() {
super.viewDidLoad()
if let url = Bundle.main.url(forResource: "Chestnuts Roasting on an Open Fire", withExtension:"mp3")
{
let player = AVQueuePlayer()
let item = AVPlayerItem(url: url)
looper = AVPlayerLooper(player: player, templateItem: item)
player.play()
}
然後處理下雪的特效:
因為有自訂背景圖片,所以特效的backgroundColor要設為.clear
let skView = SKView(frame: view.frame)
view.insertSubview(skView, at: 0)
skView.backgroundColor = UIColor.clear
let scene = SKScene(size: skView.frame.size)
scene.anchorPoint = CGPoint(x: 0.5, y: 1)
scene.backgroundColor = UIColor.clear
let emitterNode = SKEmitterNode(fileNamed: "MyParticle") //sks檔,可省略副檔名
scene.addChild(emitterNode!)
skView.presentScene(scene)
snowImageView.addSubview(skView)
view.addSubview(snowImageView)
再來是背景圖,storyboard掛上Image View秀不出圖片,
不是蓋著下雪,就是被下雪蓋住,只好用程式碼寫的試試看:
let snowImage = UIImage(named: "tree")
let snowImageView = UIImageView(image: snowImage)
snowImageView.frame = CGRect(x: 0, y: 0, width: 393, height: 852)
snowImageView.contentMode = .scaleToFill
塞進viewDidLoad才可以跟下雪一起呈現
以上