SpriteKit과 UIKit을 결합하여 사용하는 간단한 샘플
개요
iOS 앱에서 풍부한 애니메이션을 실현하기 위해 SpriteKit을 이용했을 때의 메모와 샘플 코드.
하고 싶었던 일
이미지
샘플 코드를 움직인 것.
※이것은 Gif 때문에, iOS 단말상에서는 보다 매끄럽게 움직인다
SpriteKit
특징
구현 방법
대략적인 절차는 아래.
1. SKScene, SKS 파일을 프로젝트에 추가
Xcode의 조작 순서. 메뉴의 File -> New -> File -> 각 OS의 Resource를 선택.
SpriteKit Scene, SpriteKit Particle File을 각각 작성한다.
이때 파티클은 8종류 중에서 선택할 수 있다. 샘플에서는 "Bokeh"를 이용했다.
2. SKScene 코드 작성
LightScene.swiftimport UIKit
import SpriteKit
class LightScene: SKScene {
let kFadeDuration = NSTimeInterval(1.3)
var lightNode: SKEmitterNode!
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(size: CGSize) {
super.init(size: size)
}
override func didMoveToView(view: SKView) {
addPaper()
showPaper()
}
override func willMoveFromView(view: SKView) {
lightNode.removeFromParent()
}
func addPaper(){
let fileName = "Bokeh"
let path = NSBundle.mainBundle().pathForResource(fileName, ofType: "sks")!
lightNode = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as! SKEmitterNode
lightNode.position = CGPointMake(self.size.width / 2, self.size.height / 2)
lightNode.alpha = 0
addChild(lightNode)
}
func showPaper(){
let show = SKAction.fadeInWithDuration(kFadeDuration)
lightNode.runAction(show)
}
}
3. ViewController 코드 작성
ViewController.swiftimport UIKit
import SpriteKit
class ViewController: UIViewController {
@IBOutlet weak var skView: SKView!
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
showParticle()
}
// MARK: Sprite Kit.
func showParticle() {
let scene = LightScene(size: skView.frame.size)
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
}
Interface Builder로 UIView의 컴퍼넌트를 드래그&드롭 해, 커스텀 클래스에 "SKView"를 설정한다. Outlet도 연결한다.
4. *.sks 파일 편집
Xcode내의 에디터로 설정치를 조정할 수 있다.
샘플 코드
import UIKit
import SpriteKit
class LightScene: SKScene {
let kFadeDuration = NSTimeInterval(1.3)
var lightNode: SKEmitterNode!
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(size: CGSize) {
super.init(size: size)
}
override func didMoveToView(view: SKView) {
addPaper()
showPaper()
}
override func willMoveFromView(view: SKView) {
lightNode.removeFromParent()
}
func addPaper(){
let fileName = "Bokeh"
let path = NSBundle.mainBundle().pathForResource(fileName, ofType: "sks")!
lightNode = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as! SKEmitterNode
lightNode.position = CGPointMake(self.size.width / 2, self.size.height / 2)
lightNode.alpha = 0
addChild(lightNode)
}
func showPaper(){
let show = SKAction.fadeInWithDuration(kFadeDuration)
lightNode.runAction(show)
}
}
import UIKit
import SpriteKit
class ViewController: UIViewController {
@IBOutlet weak var skView: SKView!
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
showParticle()
}
// MARK: Sprite Kit.
func showParticle() {
let scene = LightScene(size: skView.frame.size)
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
}
메모
참고
Reference
이 문제에 관하여(SpriteKit과 UIKit을 결합하여 사용하는 간단한 샘플), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ariiyu/items/ffe5a0e32ebda70e4f02텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)