모션 애니메이션 첨부의 스탬프【Swift3.0】
완성 견본
1. 프로젝트 만들기
Single View Application을 템플릿으로 새 프로젝트를 만듭니다.
2. 스탬프대와 스탬프의 위치를 Autolayout으로 정의
중첩이 아래에서 view(StampBaseView(황색)) → ImageView(스탬프대) → ImageView(스탬프 x10)가 되도록 배치합니다. 포인트는 StampBaseView(황색)를 기준으로 스탬프대와 스탬프의 제약을 해 나가는 것입니다. 그렇지 않으면 스탬프를 누르면 스탬프가 함께 흔들리지 않고 떠있는 느낌이 되어 버립니다. StampBaseView는 알기 쉽게 배경을 노란색으로 만들지만 결국 투명하게 만듭니다.
3.ViewController 구현
doStamp()가 스탬프를 누르는 메서드입니다. 처리 직전에 사이즈를 크게 & 투명하게 해, 지정 초를 걸어 사이즈와 불투명도를 바탕으로 되돌리는 것으로 스피드감을 연출하고 있습니다. 스탬프 애니메이션의 콜백에 vibrate()를 지정합니다. vibrate는 산을 흔드는 방법입니다. 좌우에 작은 로테이트를 주고 흔들리는 느낌을 내고 있습니다.
// swift 3.0
import UIKit
class ViewController: UIViewController {
var currentStampNo:Int = 0
@IBOutlet weak var stampBaseView: UIView!
@IBOutlet var stamps: [UIImageView]!
// スタンプリセット
@IBAction func stampReset(_ sender:UIButton) {
let _ = stamps.map { $0.isHidden = true }
currentStampNo = 0
}
// スタンプ押す
@IBAction func stampAdd(_ sender:UIButton) {
if currentStampNo < stamps.count {
doStamp(stamp: stamps[currentStampNo] )
currentStampNo += 1
} else {
let alert = UIAlertView()
alert.title = "Stamp Demo"
alert.message = "もういぱいです!"
alert.addButton(withTitle: "OK")
alert.show()
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// スタンプ初期化
let _ = stamps.map { $0.isHidden = true }
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// スタンプ台を揺らす。amount = 揺れ幅
func vibrate(amount: Float ,view: UIView) {
if amount > 0 {
var animation: CABasicAnimation
animation = CABasicAnimation(keyPath: "transform.rotation")
animation.duration = 0.1
animation.fromValue = amount * Float(M_PI) / 180.0
animation.toValue = 0 - (animation.fromValue as! Float)
animation.repeatCount = 1.0
animation.autoreverses = true
view.layer .add(animation, forKey: "VibrateAnimationKey")
}
else {
view.layer.removeAnimation(forKey: "VibrateAnimationKey")
}
}
// スタンプ押下
func doStamp(stamp:UIImageView) {
// 透明にする
stamp.alpha = 0.0
// 表示
stamp.isHidden = false
// サイズと位置情報
let b = stamp.bounds
UIView.animate(withDuration: 0.05,
delay:0.0,
usingSpringWithDamping:0.2,
initialSpringVelocity:10,
options:[],animations:{
// サイズを大きくする
stamp.bounds = CGRect(x:b.origin.x,
y:b.origin.y,
width:b.size.width + 130,
height:b.size.height + 130)
},
completion: nil)
UIView.animate(withDuration: 0.05,
delay: 0.8,
usingSpringWithDamping: 1.0,
initialSpringVelocity: 90,
options: [], animations: {
// サイズを元に戻す
stamp.bounds = CGRect(x:b.origin.x,
y:b.origin.y,
width:b.size.width,
height:b.size.height)
// 透過度を元に戻す
stamp.alpha = 1.0
},
completion:{ finished in
// 台紙を揺らす
self.vibrate(amount: 3.0 ,view: self.stampBaseView)
})
}
}
4. 액션 아울렛 연결
코드와 부품을 연결합니다. (아울렛 콜렉션의 접속 방법은 하부의 보충 참조)
5.완성!
[스탬프 +] 버튼으로 스탬프가 하나 늘어납니다. 10개를 넘으면 대화 상자가 표시됩니다. [리셋] 버튼으로 초기화입니다.
보충(Outlet Collection)
소스상의 작성하고 싶은 곳에 첫 번째 부품을 control을 누르면서 드래그. connection에서 Outlet Collection을 선택합니다. 변수가 생성되면 다른 부품을 순서대로 연결합니다. 연결 순서로 인덱스가 생성되는 것 같습니다.
화상 소재로서 이하의 사이트로부터 이용 받았습니다
스탬프 산 소재
일러스트 박스
h tp // w w. 일단 st-보 x. jp/
스탬프 소재
무료 소재 클럽
h tp : // 소자이. 7 가서 s. 네 t/
프로젝트 세트를 GitHub에 넣을 때
Reference
이 문제에 관하여(모션 애니메이션 첨부의 스탬프【Swift3.0】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fromage-blanc/items/7d87cba49fec89ce15b4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// swift 3.0
import UIKit
class ViewController: UIViewController {
var currentStampNo:Int = 0
@IBOutlet weak var stampBaseView: UIView!
@IBOutlet var stamps: [UIImageView]!
// スタンプリセット
@IBAction func stampReset(_ sender:UIButton) {
let _ = stamps.map { $0.isHidden = true }
currentStampNo = 0
}
// スタンプ押す
@IBAction func stampAdd(_ sender:UIButton) {
if currentStampNo < stamps.count {
doStamp(stamp: stamps[currentStampNo] )
currentStampNo += 1
} else {
let alert = UIAlertView()
alert.title = "Stamp Demo"
alert.message = "もういぱいです!"
alert.addButton(withTitle: "OK")
alert.show()
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// スタンプ初期化
let _ = stamps.map { $0.isHidden = true }
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// スタンプ台を揺らす。amount = 揺れ幅
func vibrate(amount: Float ,view: UIView) {
if amount > 0 {
var animation: CABasicAnimation
animation = CABasicAnimation(keyPath: "transform.rotation")
animation.duration = 0.1
animation.fromValue = amount * Float(M_PI) / 180.0
animation.toValue = 0 - (animation.fromValue as! Float)
animation.repeatCount = 1.0
animation.autoreverses = true
view.layer .add(animation, forKey: "VibrateAnimationKey")
}
else {
view.layer.removeAnimation(forKey: "VibrateAnimationKey")
}
}
// スタンプ押下
func doStamp(stamp:UIImageView) {
// 透明にする
stamp.alpha = 0.0
// 表示
stamp.isHidden = false
// サイズと位置情報
let b = stamp.bounds
UIView.animate(withDuration: 0.05,
delay:0.0,
usingSpringWithDamping:0.2,
initialSpringVelocity:10,
options:[],animations:{
// サイズを大きくする
stamp.bounds = CGRect(x:b.origin.x,
y:b.origin.y,
width:b.size.width + 130,
height:b.size.height + 130)
},
completion: nil)
UIView.animate(withDuration: 0.05,
delay: 0.8,
usingSpringWithDamping: 1.0,
initialSpringVelocity: 90,
options: [], animations: {
// サイズを元に戻す
stamp.bounds = CGRect(x:b.origin.x,
y:b.origin.y,
width:b.size.width,
height:b.size.height)
// 透過度を元に戻す
stamp.alpha = 1.0
},
completion:{ finished in
// 台紙を揺らす
self.vibrate(amount: 3.0 ,view: self.stampBaseView)
})
}
}
Reference
이 문제에 관하여(모션 애니메이션 첨부의 스탬프【Swift3.0】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fromage-blanc/items/7d87cba49fec89ce15b4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)