์๋ ํ์ธ์, ํ๋ผ์ ๋๋ค :)
์์ฆ์๋ ํ ๋จ๊ณ ๋ ์ฑ์ฅํ๊ธฐ ์ํด์ ๋ค์ ๊ธฐ์ด๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ณต๋ถํ๋ ์ค์ ๋๋ค.
ํ์คํ ๊ณต๋ถ๋ฅผ ํ๋ค๋ณด๋ ์ด์ ์ ์๋ฌด ์๊ฐ์์ด ์์ฑํ๋ ์ฝ๋๋ ๊ฐ๋ ๋ค์ด ๋์ ํ ๋๋๋ผ๊ตฌ์...
์๊ณ ์ฌ์ฉํ๋๊ฑฐ๋ ๋ชจ๋ฅด๊ณ ์ฌ์ฉํ๋๊ฑฐ๋์ ์ญ์ ์์ฒญ๋ ์ฐจ์ด์ด๊ธฐ ๋๋ฌธ์ ํญ์ ๊ธฐ์ด๋ถํฐ ํํํ ํฉ์๋ค...
(๊ทผ๋ฐ ๊ธฐ์ด๋ง ๊ณต๋ถํ๋ค๋ณด๋ฉด ํฅ๋ฏธ๊ฐ ๋จ์ด์ง๋๊ฑด ์ฌ์ค... ๊ทธ๋ฌ๋๊น ์ ์ ํ ์๋ฆฌ์กฐ๋ฆฌ ์์์ฃ ...? ๐)
frame vs bounds
์ค๋์ frame๊ณผ bounds์ ๋ํด ์ ๋ฆฌํ ๊ฑฐ์์.
์ ๊ทผ๋ฐ, ์์ฝ๋ฒ์ ์ด๋๊น ์์ธํ์ง ์์๋ ์ดํดํด์ฃผ์ธ์...
๊ผผ๊ผผํ ์ค๋ช
๋ฒ์ ์ ๋์ค์...
์ฐ์ ๋ค ์ดํดํ๊ณ ๋์ ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ฉด frame๊ณผ bounds์ ์ฐจ์ด๋ ๋ค์ 3๊ฐ์ง๋ก ์ ๋ฆฌํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์ขํ๊ณ์ ๋ํ ์ฐจ์ด, ํฌ๊ธฐ์ ๋ํ ์ฐจ์ด, ์ค์ ๋ก ์์ง์์ ๋ ์์ง์์ ์ฐจ์ด
์ ๊ฐ ์ดํดํ์ ๋๋ ์ด 3๊ฐ์ง๊ฐ ์ ๋ถ์ด๋ค.
ํนํ ๋ง์ง๋ง ๋ด์ฉ์ด ์ฒ์์๋ ์ดํดํ๊ธฐ ์ด๋ ค์ด๋ฐ ์ด๋ ์ง์ ๊ทธ๋ ค๋ณด๋ฉด์ ์ดํดํด๋ณด๊ณ , ์ฝ๋๋ก ์์ฑํด๋ณด๋ฉด์ ์ดํดํด์ผํด์!
Origin (x, y) : ์ขํ๊ณ์ ๋ํ ์ฐจ์ด
frame์์ origin์ Superview์ ์ขํ๊ณ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ช
ํ๊ณ ,
bounds์์ origin์ ์์ ์ ์ขํ๊ณ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ช
ํฉ๋๋ค.
Size (width, height) : ํฌ๊ธฐ์ ๋ํ ์ฐจ์ด
frame์์ size๋ view๋ฅผ ๊ฐ์ธ๋ ํฌ๊ธฐ๋ฅผ ์๋ฏธํฉ๋๋ค. ⇒ ํ์ ์์๋ size๊ฐ ์ปค์ง๊ฒ ๋จ
bounds์์ size๋ view ์์ฒด์ ๋ณธ๋ ํฌ๊ธฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
Move : ์์ง์์ ๋ํ ์ฐจ์ด
frame์ ์๊ธฐ ์์ ์ view๋ฅผ ์ด๋์ํต๋๋ค.
bounds๋ subviews๋ฅผ ๋ฐ๋๋ฐฉํฅ(+, -)์ผ๋ก ์ด๋์ํต๋๋ค.
Sample
๊ณต๋ถ ์ข ํด๋ณด์๊ณ , ํ ์คํธ ํ ๋ฒ ํด๋ณด์ธ์.
Mission1) ์๋์์ ์ฃผ์์ฒ๋ฆฌ ํ ๋ถ๋ถ์ ์ฑ์์ ์ฃผํฉ์ ๋ฐ์ค๋ฅผ ํ์ ๋ฐ์ค ์ฐ์ธก ํ๋จ์ผ๋ก ๋ณด๋ด๋ณด์ธ์!
import UIKit
class ViewController: UIViewController {
let grayView = UIView()
let orangeView = UIView()
override func viewDidLoad() {
super.viewDidLoad()
setup()
}
private func setup() {
grayView.backgroundColor = .gray
grayView.frame = CGRect(x: 50, y: 50, width: 200, height: 200)
view.addSubview(grayView)
orangeView.backgroundColor = .orange
orangeView.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
grayView.addSubview(orangeView)
UIView.animate(withDuration: 2) {
// code
// ์ฃผํฉ์ ๋ฐ์ค๋ฅผ ํ์ ๋ฐ์ค์ ์ฐ์ธกํ๋จ์ผ๋ก ๋ณด๋ด๋ ์ฝ๋๋ฅผ ์์ฑํ์์ค.
}
}
}
์๋์์ ์ฝ๋๋ฅผ ํ์ธํด๋ณด์ธ์~
import UIKit
class ViewController: UIViewController {
let grayView = UIView()
let orangeView = UIView()
override func viewDidLoad() {
super.viewDidLoad()
setup()
}
private func setup() {
grayView.backgroundColor = .gray
grayView.frame = CGRect(x: 50, y: 50, width: 200, height: 200)
view.addSubview(grayView)
orangeView.backgroundColor = .orange
orangeView.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
grayView.addSubview(orangeView)
UIView.animate(withDuration: 2) {
// ์ฃผํฉ์ ๋ฐ์ค๋ฅผ ํ์ ๋ฐ์ค์ ์ฐ์ธกํ๋จ์ผ๋ก ๋ณด๋ด๋ ์ฝ๋๋ฅผ ์์ฑํ์์ค.
self.grayView.bounds.origin.x = -100
self.grayView.bounds.origin.y = -100
}
}
}
๋ง๋ฌด๋ฆฌ
์๋ ๊ณต๋ถํ๋๋ฐ ์ฐธ๊ณ ํ ๋ ํผ๋ฐ์ค ์ฒจ๋ถํ ๊ฒ์!
๋ค๋ฅธ ๋ธ๋ก๊ทธ์์ ๋๋ฌด ์ ์ค๋ช
ํด์ฃผ๊ณ ์์ต๋๋ค.
์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ ํผ๋ฐ์ค
'๐ iOS & Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] ํ ์คํธ์ ํฌํจ๋์ด ์๋ HTMLํ๊ทธ ์ ๊ฑฐํ๊ธฐ (0) | 2021.08.28 |
---|---|
[iOS] Convenience init(ํธ์ ์ด๋์ ๋ผ์ด์ ) (2) | 2021.08.22 |
[iOS] ์ต์ ๋, Optional (0) | 2021.08.18 |
iOS Issue(1) - Build input file cannot be found (0) | 2021.07.30 |
[iOS] ๋๋ ๋ชจ๋ฅด๊ฒ ์ฌ์ฉํ๊ณ ์์๋ Generic (0) | 2021.07.29 |