Merry Christmas Tree

天氣越來越冷,又到了年底耶誕節的慶典氛圍,今年女友一直想買耶誕樹。

以前旅居北美時,都是砍一棵樹回家,佈置起來就很漂亮

可是在台灣這幾乎是天方夜譚

因此,只好自己做一棵會動的,比較有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才可以跟下雪一起呈現

以上

--

--