[iOS/UI]ํญ๋ฐ ์์ดํ ๋๋ ์ ๋ ์ ๋๋ฉ์ด์ ๋ฃ๊ธฐ (UITabBarItem Animation)
์๋ ํ์ธ์ Foma ์ ๋๋ค!!!
์ค๋ ์์๋ณผ ๊ฑด ํญ๋ฐ๋ฅผ ํญํ์ ๋ ์ด๋ฏธ์ง๊ฐ ์คํ๋ง์ฒ๋ผ ์ปค์ก๋ค ์์์ก๋คํ๋ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํด๋ณผ๊ฑฐ์์.
๊ทธ๋ผ ๋ฐ๋ก ์์ํ๊ฒ ์ต๋๋ค.
Xcode
์ฐ์ ํญ๋ฐ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์.
override๋ didSelect(ํญ๋ฐ์์ดํ ์ ํํ์์) ๋ฉ์๋๋ฅผ ์จ์ค๋๋ค.
์๋ ์ฌ์ง๊ณผ ๊ฐ์ด ์์ ์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ์ต๋๋ค.(์ธ๋ฑ์ค๋ฅผ ์ฐพ์๋ด๋ ์ฝ๋)
๊ทธ ๋ค์ ์ ๋๋ฉ์ด์ ํจ์๋ฅผ ๋ฐ๋ก ๊ตฌํํด์ค๋๋ค.
๋ง์ง๋ง์ผ๋ก didSelectํ์ ๋ performSpringAnimationํจ์์ imageView๋ฅผ ์ธ์๊ฐ์ผ๋ก ๋ฃ์ด์ค ๋ค ์คํํด์ค๋๋ค.
StoryBoard
์คํ ๋ฆฌ๋ณด๋๋ก ์ด๋ํ์ ์ ํญ๋ฐ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค๊ณ ๊ฐ ์์ดํ ์ ์ด๋ฏธ์ง๋ฅผ ๋ฃ์ด์ค๋๋ค. (์ ๋ ๊ฒ ์๋ณธ ๊ทธ๋๋ก์ ์ด๋ฏธ์ง๋ฅผ ์ถ๊ฐํ์๊ณ ์ถ์ผ๋ฉด
์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์)
๋ฐ๋์ ํด๋์ค ์ด๋ฆ์ ์๊น ๋ง๋ค์ด์ฃผ์ จ๋ ํญ๋ฐ์ปจํธ๋กค๋ฌ๋ ๊ฐ์ ์ด๋ฆ์ ์จ์ผํฉ๋๋ค.
GIF
์คํํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ดํ ์ ํญํ์ ๋ ํ์ด์ค๋ฅด๋ ๋ฏํ ์ ๋๋ฉ์ด์ ์ด ์ ์ฉ๋๊ฑธ ๋ณผ ์ ์์ต๋๋ค!!
Source Code
์ ์ฒด์์ค์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import UIKit
class TabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
guard let idx = tabBar.items?.firstIndex(of: item), tabBar.subviews.count > idx + 1, let imageView = tabBar.subviews[idx + 1].subviews.compactMap ({ $0 as? UIImageView }).first else {
return
}
performSpringAnimation(imgView: imageView)
}
//์ด๋ฏธ์ง๋ทฐ์ ์คํ๋ง ์ ๋๋ฉ์ด์
์ ์ฉํ๊ธฐ
func performSpringAnimation(imgView: UIImageView) {
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.5, options: .curveEaseInOut, animations: {
imgView.transform = CGAffineTransform.init(scaleX: 1.4, y: 1.4)
UIView.animate(withDuration: 0.5, delay: 0.2, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.5, options: .curveEaseInOut, animations: {
imgView.transform = CGAffineTransform.init(scaleX: 1, y: 1)
}) { (flag) in
}
}) { (flag) in
}
}
}
|