์ค๋ซ๋ง์ ํฌ์คํ โฆโฆโฆโฆ. ์ฌ๋ฌ๋ชจ๋ก ํ๋ ์๊ธฐ์๋ค ใ ๊ธฐ์ด๋ด์
๊ฐ์ธ์ ์ผ๋ก๋ iOS์ ์ฅ์ ์ค ํ๋๊ฐ ๋ถ๋๋ฌ์ด ๋์์ด๋ผ ์๊ฐํ๋ค.
๊ทธ๋์ ๊ฐ์ธ์ ์ผ๋ก ์น๋ทฐ๋ฅผ ์ ํธํ์ง ์๋ ์ด์ ์ค ํ๋๋ ์น๋ทฐ๋ก๋ ๋์์ด ๋ถ๋๋ฌ์ธ์๋ ์์ผ๋,
๋ค์ดํฐ๋ธ์ ๋ถ๋๋ฌ์์ ๋ฐ๋ผ๊ฐ๋ ์ฑ์ ๋ณด์ง ๋ชปํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ถ๋๋ฌ์ด ๋์๊ณผ ์ ๋ง๋ ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉ์๊ฐ ์ฑ์ ๋ ๊ด์ฌ์ ๊ฐ๊ฒ ํด์ฃผ๊ณ , ์ข์ ๊ฒฝํ(UX)๋ฅผ ์ค๋ค๊ณ ์๊ฐํ๋ค.
ํ๋ฉด ํ๋๋ฅผ ๋์ธ๋๋ ๋จ์ํ ๋ณด์ฌ์ฃผ๋๊ฒ ์๋ ์ด๋ป๊ฒ ํด์ผ ๋ ์์ฐ์ค๋ฝ๊ณ ์ข์ ๊ฒฝํ์ ์ ์ ์๊ฒ ์ ์ฌํ ์ ์์์ง
๊ณ ๋ฏผํ๊ณ ์๋ํ๋ ๊ฐ๋ฐ์๊ฐ ์ข์๊ฒ ๊ฐ๋ค.
๊ทธ๋์ ์๋ํ UI ๋ฐ๋ผํ๊ธฐ!
๋ช๋ช ์ฑ๋ค๋ณด๋ฉด ํน์ UIView ๋๋ UIButton ๋ฑ์ ๊ธธ๊ฒ ๋๋ฅด๋ฉด ์ด๋ ์ํค๊ณ ,
๋ค๋ฅธ ๋ทฐ ์์ ์ฌ๋ฆด์ ์๋ก์ด ์ก์
์ด ์ผ์ด๋จ์ ๋ณผ ์ ์๋ ์ฑ๋ค์ด ์์๋ค.
์ด๋ฐ ์ฑ๋ค ๋ณด๋ฉด์ ์ด๋ป๊ฒ ํ๋ฉด ์ ๋ ๊ฒ ๋ ๊น? ๋ผ๋ ์๊ฐํ๋ค๊ฐ ์๋๋ฅผ ํด๋ณด์๋ค.
์ด๋ฒ ํธ์ 3ํธ์ผ๋ก ์ด๋ฃจ์ด์ง๊ฒ์ด๊ณ , ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- Gesture - Long Press
- Transform
- ์์ฉํ๊ธฐ (1 + 2)
๋ฌด์์ ๋ง๋ค๊ฒ ๋ ์ง ๊ฒฐ๊ณผ๋ฌผ๋ถํฐ ๋ณด๊ณ ์ด์ผ๊ธฐ๋ฅผ ์งํํ๋๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค.
์์โฆ ํ
๋ง ๋ฐ๊พธ๊ณ ์ด๋ฏธ์ง๋ฅผ ๋ก์ปฌ์์ ๋ชป๋ถ๋ฌ์ ํธ์ํ๊ณ ํ์ธํ๋๊ฒ ๋ฐ๋ณตํ๋ค ์ด๊ฑด ์๋๋ค ์ถ์ด์ ๋ก์ปฌ๋ก ๋ถ๋ฌ์ค๊ฒ๋ ํ๋๋ฐ, ์ฝ์ง์ ๋๋ฌด ๋ง์ด ํ๋คโฆ.. ๊ทธ๊ฑด ์ฑ๊ณตํ๋๋ฐ, ์ด๋ฏธ์ง ์์ผ ํฌ๋?โฆ. ๋ด์ผ ์ด์ด์ ์ ์ด์ผ๊ฒ ๋ค.
์์ gif ํ์ผ์ ๋ณด๋ฉด ํน์ง์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์คํฌ๋กค๋ทฐ์ด๋ฉฐ ์ ์๋ ์คํฌ๋กค์ด ๊ฐ๋ฅํ๋ค.
- ๋กฑํฐ์น์ ํฐ์น๋ ๋ทฐ์ Frame๊ณผ Alpha๊ฐ์ด ๋ณํํ๋ฉฐ ํด๋ฆญ(ํฐ์น)ํ์ฑ๋ก ์์ง์ด๋ฉด ๋ฐ๋ผ ์์ง์ธ๋ค.
- 2์ ์ํ๋ก ๊ฐ์ด๋ฐ ์ฌ๊ฐํ์ ์์ญ์ ๋ค์ด๊ฐ๋ฉด ๊ฐ์ด๋ฐ ์ฌ๊ฐํ์ด ๋ฐ์์ ํ๋ค.
์ด์ ๊ฐ์ ์ ์ด ๋ค๋ฅธ ์ ๋ช ์ฑ๋ค์์ ๋ณด์ด๋ ์ก์ ๋ค์ด์๋ค. ๊ทธ๋ ๋ด ์์ ๊ฐ์ ์ก์ ์์ ์ฃผ๋ชฉํด์ผํ ์ ์ ๋ฌด์์ผ๊น?
- ์คํฌ๋กค๋ทฐ์ด๋ฉฐ ์ ์๋ ์คํฌ๋กค์ด ๊ฐ๋ฅํ๋ค.
๋กฑํฐ์น ํ์ ์์๋ ์์ง์ด๋ ๊ฒ๊ณผ ์คํฌ๋กค๋ทฐ์ ํฐ์นํ ์์๋ ์์ง์ด๋๊ฒ์ ๊ตฌ๋ถ์ด ํ์ํ๋ค. (์ฝ๊ฒ ๋งํด ํฐ์น๋ ํ ์์๋๋ก ์์ง์ด๋๋ฐ ์คํฌ๋กค๋ทฐ๋ ์์๋๋ก ์์ง์ด๋ฉด ์๋๋ค๋ ๋ป)
- ๋กฑํฐ์น์ ํฐ์น๋ ๋ทฐ์ Frame๊ณผ Alpha๊ฐ์ด ๋ณํํ๋ฉฐ ํด๋ฆญ(ํฐ์น)ํ์ฑ๋ก ์์ง์ด๋ฉด ๋ฐ๋ผ ์์ง์ธ๋ค.
๋กฑํฐ์น ํ Frame๊ณผ Alpha๊ฐ์ ๋ณํ๋ฅผ ์ฃผ๊ณ ๋๋๊ทธ์ ๋ฐ๋ผ๊ฐ๋๋ก ํด์ผํ๋ค.
- 2์ ์ํ๋ก ๊ฐ์ด๋ฐ ์ฌ๊ฐํ์ ์์ญ์ ๋ค์ด๊ฐ๋ฉด ๊ฐ์ด๋ฐ ์ฌ๊ฐํ์ด ๋ฐ์์ ํ๋ค.
์ฌ๊ฐํ ์์ ๋ค์ด๊ฐ์๋ ์ฌ๊ฐํ์ด ๋ฐ์ํ๊ฒ ํ๋ ค๋ฉด, ํ์ฌ ํฐ์น๋ ์ ํํ ์์น ์ ๋ณด๋ฅผ ์์์ผ ํ๋ค.
์ฃผ์:
์ด ์๋ฆฌ์ฆ์์ ์คํฌ๋กค๋ทฐ๋ฅผ ์์ฑํ๊ณ ์ ์ฉํ๋ ๋ฒ์ ๋ฐ๋ก ๋ค๋ฃจ์ง ์๋๋ค.
ํ์๋ ์คํฌ๋กค ๋ทฐ ์์ ์คํ๋ทฐ๋ฅผ ๋ฃ๊ณ ์ฝ๋๋ก ๋ทฐ๋ฅผ ์ถ๊ฐํ๋ ํ์์ ์ด์ฉํ์๊ธฐ์ gif ํ๋จ์ Add์ Clear๋ฒํผ์ด ์กด์ฌ
๊ทธ๋์ ๊ธ์ ๋์ ๋ถ์ ๊ฐ์ด 3๊ฐ์ง๋ก ํฌ์คํ ์ ๋๋ ์ ์งํ!
์ด ๊ธ์์ ์๋์ ์ผ๋ก ์ฌ์ด ์ ์ค์ณ์ ๊ดํด์ ๊ธ์ ์ ์ด๋ณธ๋ค.
Gesture?
์ ์ค์ฒ๋ ์์ํ๊ฒ ํ๊ธ๋ก ์๊ธฐํ๋ฉด ๋์์ด๋ผ ๋ณผ ์ ์๋ค.
๊ทธ๋ ๋ด ์ฑ์์ ๋์์ด๋ ๋ฌด์์ผ๊น? ์ฌ์ฉ์์ ์ก์
์ด๋ผ๊ณ ๋ณผ ์ ์์ ๊ฒ ๊ฐ๋ค.
๊ฐ์ฅ ๊ฐ๋จํ ์ ์ค์ณ๋ ํฐ์น๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ์ ์ฌ์ฉํ๋ ค๋ฉด ์ฌ์ฉ์๊ฐ ํด์ผํ ์ก์
์ ํฐ์น์ผ ๊ฒ์ด๋ค.
๋ด๊ฐ ์ํ๋ ํ๋ฉด์ผ๋ก ์ด๋์ ํด์ผํ๊ณ , ์ํ๋ ์์ดํ
์ ์ ํํด์ผํ๊ณ ,
๊ทธ ์์ดํ
์ ์ญ์ ํ๋ ์ถ๊ฐํ๋ ์ ์ฅํ๋ ์ํ๋๊ฒ์ ํ๋ ค๋ฉด ๊ทธ์ ํด๋น๋๋ ๊ฒ์ ๋๋ฌ์ผํ๋ค.
์ด์ ๊ฐ์ด ๋๋ฅด๋ ํ์๊ฐ ํ๋์ ์ ์ค์ณ์ด๋ค.
์ด ํฐ์น ์ธ์ ๋ฌด์์ด ์์๊น
- ๋๋๊ทธ(๋์๊ฐ๋ฝ ํฐ์น,์ธ์๊ฐ๋ฝ, ๋ค์๊ฐ๋ฝโฆ)
- ๋กฑํฐ์น
- ์ค์์ดํ
- ํ์น ํฌ ์ค
์ง๊ธ์ ์ฌ๊ธฐ๊น์ง๋ง ์๊ฐ๋๋ค..
๋ญ ์๋ฌดํผ ์ด๋ฐ ๊ฒ๋ค์ด ์๋ค.
์ด ๊ธ์์๋ ๋กฑํฐ์น ๋ํด์ ์์๋ณผ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์๋ถํฐ๋ ํ์ํ ๋ด์ฉ๋ง ๊ฐ๊ฒฐํ๊ฒ ์์๋ค. ์ฝ๊ธฐ ์ฝ๊ฒ.
Long Press Gestrue (๋กฑํฐ์น)
๋กฑ ํ๋ ์ค๋ ๋ญ๊ฐ ๊ฑฐ๋ถ๊ฐ์ด ๋๋ ๋กฑํฐ์น๋ผ๊ณ ํ๊ฒ ๋ค.
์ผ๋จ ์ ์ฉํ๋ ์ฝ๋๋ถํฐ ๋ณด์
// Long Press Gesture - ์ ์ธ
let longTouchGesture = UILongPressGestureRecognizer(target: self, action: #selector(longTouchAction(_:)))
๋ท๋ถ๋ถ์ด ์ด๋์ ๋ง์ด ๋ณธ๊ฑฐ ๊ฐ๋ค. ๋ฒํผ์ ์ก์ ๋ฃ์๋ ๋ง์ด ๋ดค์ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ์๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
ํ๊ฒ: ๋กฑํฐ์น ํ์ ๋, ์ด๋์ ์ฒ๋ฆฌํ ๊ฑฐ์ผ?
์ก์ : ๋กฑํฐ์น ํ์ ๋, ๋ฌด์จ ์ฒ๋ฆฌํ ๋?
์ด๊ฑด ์ ์ค์ณ์ ๋ํ ์ ์๋ง ๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ด ์ด ์ ์ค์ณ๋ฅผ ์ด๋๊ฐ์ ์ ์ฉ์ ์์ผ์ค์ผ๊ฒ ์ง?
// Long Press Gesture - ์ ์ฉ
view.addGestureRecognizer(panGestrue)
๋ค์๋งํด ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ๋ค.
view
๋ฅผ ๋กฑํฐ์น ํ์ ๋, self
์ ์๋ longTouchAction(_:)
๋ผ๋ ํจ์๋ฅผ ์คํํ์~
๊ทผ๋ฐ ์ฌ๊ธฐ์ longTouchAction์ด๋ผ๋ ํจ์๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
@objc
func longTouchAction(_ recognizer: UILongPressGestureRecognizer) {
print(recognizer.state.rawValue)
}
@objc
๋ selector
์๋ค ์จ์ฃผ๋ ค๋ฉด ์จ์ผํ๊ณ ,
recognizer
๋ผ๋ ์ ๊ฐ ์ ์ค์ณ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค
์ด๋ฅผ ํตํด ๋ง์ ๊ฒ์ ์ ์ ์์ง๋ง ์ฌ๊ธฐ์๋ .state
์ ๋ํด์ ์์๋ณด์.
๊ทธ๋ ๋ค enum
์ด๊ณ ์๋ฃํ์ Int
์ด๋ค. ๊ทธ๋ ๋จ๊ฑด switch
๋ ๊ถํฉ์ด ์ ๋ง๊ฒ ๋ค๋ ๋ง~
๊ทธ๋ผ enum
์ด๋ ์ข
๋ฅ๋ฅผ ํ๋ฒ ๋ณด์.
๋ญ๊ฐ ๋ง๋ค. ์ธ๋ถํํด์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
๊ทผ๋ฐ ์ด ๊ธ์์ ๋กฑํฐ์น์ ์์, ์ข ๋ฃ, ๋ณํ์ ๋ํด์ ์๋ฉด ๋๋ค.
๋ค์๋งํด .began
๊ณผ .ended
๊ทธ๋ฆฌ๊ณ .changed
๋ง ์๋ฉด ๋๋ค.
์๋์ ์ฝ๋๋ฅผ ๋ณด์.
@objc
func longTouchAction(_ recognizer: UILongPressGestureRecognizer) {
switch recognizer.state {
case .began:
// ๋กฑํฐ์น ์์
break
case .ended:
// ๋กฑํฐ์น ์ข
๋ฃ
break
case .changed:
// ํฐ์น ํ ๋ณํ
// 1
let point: CGPoint = recognizer.location(in: self.view)
// 2
let point2: CGPoint = recognizer.location(in: self.longTouchView)
default:
// ๋๋จธ์ง ๋ถํ์
break
}
}
.began
๋กฑํ๋ ์ค๊ฐ ์์ ๋๋ค๋ฅผ ์๋ ค์ค๋ค.
.ended
๋กฑํ๋ ์ค๊ฐ ๋๋ฌ๋ค๋ฅผ ์๋ ค์ค๋ค.
.changed
์๋ฅผ ์ฃผ๋ชฉํ์,
์ location(in:_)
์ด ๋ฌด์์ด๋ ํ๋ฉด, ๋ฌธ์์ ์ด๋ ๊ฒ ์จ์๋ค.
Summary
Returns the point computed as the location in a given view of the gesture represented by the receiver.
Declaration
func location(in view: UIView?) -> CGPoint
Discussion
The returned value is a generic single-point location for the gesture computed by the UIKit framework. It is usually the centroid of the touches involved in the gesture. For objects of the UISwipeGestureRecognizer and UITapGestureRecognizer classes, the location returned by this method has a significance special to the gesture. This significance is documented in the reference for those classes.
Parameters
view
A UIView object on which the gesture took place. Specify nil to indicate the window.
Returns
A point in the local coordinate system of view that identifies the location of the gesture. If nil is specified for view, the method returns the gesture location in the windowโs base coordinate system.
์ด๋ ต๋ค, ์ฝ๊ฒ ๋งํด ๋ค์๊ณผ ๊ฐ๋ค.
๋น์ ์ด ํฐ์นํ ์์น ์ ๋ณด(์ขํ)๋ฅผ ์๋ ค ์ค๊ฒ! ์ด๋
view
๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ์ง ์๋ ค์ค
์ฆ, ์ ์ฒด ํ๋ฉด์ x,y๊ฐ ๋ช์ธ์ง ์๋ฉด ์ข๊ธด ํ๊ฒ ์ง๋ง,
ํน์ view
์์์ x,y๊ฐ ๋ช์ธ์ง ๊ณ์ฐํ๊ธฐ ๊ท์ฐฎ์ผ๋ ๊ธฐ์ค์ ์ ์๋ ค์ฃผ๋ฉด ์์์ ๊ณ์ฐ๋ ๊ฐ์ ์๋ ค์ค๋ค.
๋ค์ ๋งํด,
์์ ์ฃผ์ 1
์ self.view
๊ธฐ์ค์ผ๋ก x,y๋ฅผ ์๋ ค์ฃผ๋ ๊ฐ์ด๊ณ
์์ ์ฃผ์ 2
๋ self.panGetstureView
๊ธฐ์ค์ผ๋ก x,y๋ฅผ ์๋ ค์ฃผ๋ ๊ฐ์ด๋ค.
(๋ง์น view์ frame๊ณผ bound ์ฐจ์ด ๊ทธ๋ฐ ๋๋โฆ?)
๊ทธ๋ผ ์ฌ๊ธฐ์ point
์ .changed
๋ฅผ ์ ์๊ฐํด๋ณด์,
.began
๊ณผ .ended
๋ ํ๋ฒ๋ง ํธ์ถ๋์ง๋ง .changed
๋ ๋ฐ๋๋๋ง๋ค ํธ์ถ์ด ๋๋ค.
ํ๋ง๋๋ก ๋กฑํฐ์น ์์ ํ ๋ณํ๋๋ ์์น๊ฐ์ ์ ์ ์๋ค.
์ด๋ฅผ ์ด์ฉํ๋ฉด, ์์ GIF์ ๊ฐ์ด ๋กฑํฐ์นํ ๋ณํ ๋๋ ๊ฐ์ ๋ฐ๋ผ view
๋ฅผ ์ด๋์์ผ์ค ์ ์๋ค๋ ๋ง์ด ๋๋ค!
(์ ์ดํด๊ฐ ์๋๋ค๋ฉด ์ ์ฝ๋์์ point
์ point2
๋ฅผ ์ฃผ์๊ฑธ๊ณ print
ํด์ x, y๊ฐ์ ๋ํด ๋ณด๋ฉด ์ดํด์ ๋์์ด ๋ ๊ฒ ๊ฐ๋ค.)