【iOS】新年明けたので、画面に花火を散らしたよ
2017年になりました。
新年あけましておめでとうございます。
新年一発目のUIトレース会を1月12日に株式会社オハコ様にて行いました。
2017年の元旦にFacebookが面白いイースターエッグを実装していました。
ポストをするとその文字に「あけおめ」や「Happy New Year」などの特定の文字があるとボタンになって、それをタップすると花火のアニメーションが打ち上げられるのです。
以下のYoutube動画で動きが確認できます。
これをお題募集アンケートに出したらぶっちぎりでFacebookが一番になりました。
https://www.facebook.com/groups/407821455988195/permalink/1196346283802371/
今回の記事では、朝活で私が実装した例を紹介したいと思います。
作ったもの
今回はボタンを押したら、SpriteKitで火花ができるようにしました。
作り方
ボタンを押したら全面に火花が出るアプリの作り方です。
SpriteKit Particle Fileの追加
SpriteKitにパーティクルを表示するファイルがあります。これを追加します。
XcodeのメニューでFile > New > FileをしてSpriteKit Particle Fileを追加します。
今回はParticle templeteをSparkにしました。
名前はNewYearParticle.sksにしました。
Storyboardの設定
Navigation Controllerを使ったビュー構成にしました。
真ん中にボタンをつけたビューコントローラーと
火花を表示するためのビューを作るためのビューコントローラーを作りました。
identifyがFullScreenとつけています。
コード
ボタンにアクションを接続したら以下のコードを書きます。
@IBAction func animation(_ sender: UIButton) {
guard let myStoryboard = self.storyboard else {
return
}
let fullScreenViewController = myStoryboard.instantiateViewController(withIdentifier: "FullScreen")
guard let fullView = fullScreenViewController.view else {
return
}
fullView.isUserInteractionEnabled = false
//Sprite Kitを追加
let sparkView = SKView(frame: fullView.bounds)
sparkView.isUserInteractionEnabled = false
sparkView.autoresizingMask = [.flexibleWidth]
sparkView.backgroundColor = UIColor.clear
fullView.addSubview(sparkView)
//Sceneの追加
let scene = SKScene(size: sparkView.frame.size)
scene.backgroundColor = UIColor.clear
sparkView.presentScene(scene)
if let node = SKEmitterNode(fileNamed: "NewYearParticle") {
node.position = CGPoint(x: scene.frame.width / 2, y: scene.frame.height / 2)
scene.addChild(node)
}
self.navigationController?.view.addSubview(fullView)
UIView.animate(withDuration: 2.0, delay: 0, options: .curveEaseIn, animations: {
fullView.alpha = 0.0
}, completion: {
finishe in
fullView.removeFromSuperview()
})
}
これで動くはずです。
次にやること
次回はUITextViewに特定の文字(あけおめなど)があったらリンクにして、タップしたら火花を散らせたいです。
次回のUIトレース会は1月26日です。
参加お待ちしております!
参考
【Swift】燃えさかるUITabBarを作ってみる
Happy New Year Face book New year's Animation👌