[iOS] UITapGestureRecognizer: ํ๋ฉด ํญ ๋์ ์ธ์ํ๊ธฐ
UITapGestureRecognizer
์ค๋์ GestureRecognizer์ ์๋ธํด๋์ค ์ค ํ๋์ธ UITapGesture๋ฅผ ์ฌ์ฉํด์ ํญ ๋์์ ์ธ์ํ๋ ์์ ์ ํด๋ณด๊ฒ ์ต๋๋ค. ์ค๋์ ๋ชฉํ๋ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ UITapGestureRecognizer๋ฅผ ์ถ๊ฐํด์ ์ด๋ค ์์๊ฐ ํญ ๋์๋์ง ํ์ํด์ฃผ๋ ๊ฒ์ ๋๋ค.
์คํ ๋ฆฌ๋ณด๋๋ก ์ถ๊ฐํ๊ธฐ
TapGestureRecognizer๋ ์คํ ๋ฆฌ๋ณด๋๋ก ์ถ๊ฐํ ์๋ ์๊ณ , ์ฝ๋๋ก ์ถ๊ฐํ ์๋ ์์ต๋๋ค. ๋จผ์ ๊ฐํธํ๊ฒ ์คํ ๋ฆฌ๋ณด๋๋ก ์์ ์ ํด๋ณด๊ฒ ์ต๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ Tap Gesture Recognizer๋ฅผ ์ ํํด์ ์ถ๊ฐํด์ค๋๋ค.
์ ์์ ์ผ๋ก ์ถ๊ฐ๊ฐ ๋์๋ค๋ฉด ์ผ์ชฝ์ Tap Gesture Recognizer๊ฐ ์ถ๊ฐ๋ฉ๋๋ค.
์ค๋ฅธ์ชฝ ์ธ์คํํฐ๋ฅผ ๋ณด๋ฉด Taps์ Touches์ ์ ๋๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค. Taps๋ ๋ทฐ๊ฐ ๋ช ๋ฒ ํฐ์น ๋์ด์ผ ์ ์ค์ฒ๊ฐ ์ธ์ํ ์ง๋ฅผ ์ ํ๊ณ , Touches๋ ๋ช ๊ฐ์ ์๊ฐ๋ฝ์ผ๋ก ํฐ์นํด์ผ ์ธ์ํ๊ฒ ํ ์ง๋ฅผ ์ ํฉ๋๋ค.
์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด์ IBAction์ ์ถ๊ฐํด์ฃผ๊ฒ ์ต๋๋ค.
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func viewDidTap(_ sender: UITapGestureRecognizer) {
print("touched")
}
}
Tap Gesture Recognizer๊ฐ ์ถ๊ฐ๋ ๋ทฐ์ ์ ํด์ง ์กฐ๊ฑด์ ๋ฐ๋ผ ์ ์ค์ฒ๊ฐ ์ธ์๋๋ฉด, IBAction ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค. ์ ์ค์ฒ๊ฐ ์ ์ธ์๋๋์ง ํ์ธํด๋ณด๊ธฐ ์ํด์ ์ ์ค์ฒ๊ฐ ์ธ์๋ ๋๋ง๋ค ํ๋จ UILabel์ ํฐ์น๊ฐ ๋์์์ ์๋ฆฌ๋ ํ ์คํธ๋ฅผ ๋ณด์ด๋๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
์ ๋์ํฉ๋๋ค! ์ด์ ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชฉํ๋๋ก ํ๋ฉด์ ๋ทฐ ์ค ์ด๋ค ๋ทฐ๊ฐ ์ ํ๋์๋์ง๋ฅผ ์์๋ด์ผํ๋๋ฐ์, ๊ฐ ๋ ์ด๋ธ์ ๋ชจ๋ ํญ ์ ์ค์ฒ๋ฅผ ์ถ๊ฐํด์ฃผ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง hitTest ๋ฉ์๋๋ฅผ ์๊ฐํ ๊ฒธ hitTest()๋ฅผ ์ด์ฉํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
hitTest(_:with:)
๐ก Returns the farthest descendant of the receiver in the view hierarchy (including itself) that contains a specified point.
hitTest ๋ฉ์๋๋ ์ด๋ค ์ขํ๊ฐ ์ ๋ฌ๋์์ ๋ ํด๋น ์ขํ๋ฅผ ํฌํจํ๋ ์ต์๋จ(์ฌ์ฉ์์ ๊ฐ์ฅ ๊ฐ๊น์ด)์ ์์นํ ๋ทฐ๋ฅผ ๋ฐํํ๋ ๋ฉ์๋์ ๋๋ค. UITapGesture๋ location ํ๋กํผํฐ๋ฅผ ํตํด ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋์ ์ขํ๊ฐ ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์, ์ด ์ขํ๋ฅผ hitTest ํด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ด์ฉํ๋๋ก ํ๊ฒ ์ต๋๋ค.
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var resultLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func viewDidTap(_ sender: UITapGestureRecognizer) {
resultLabel.text = (self.view.hitTest(sender.location(in: self.view), with: nil) as? UILabel)?.text ?? "NONE"
resultLabel.sizeToFit()
}
}
IBAction์์ ์ ๋ฌ๋๋ ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก hitTest๋ฅผ ์ํํ๊ณ , ๋ฐํ๋ ๋ทฐ๊ฐ UIView๋ผ๋ฉด ํ ์คํธ๋ฅผ ํ๋จ์ UILabel์ ํ ์คํธ๋ก ์ค์ ํด์ฃผ๋๋ก ์ฝ๋๋ฅผ ์์ฑํ์ต๋๋ค. ๊ทธ๋ผ ์ด์ ํ ์คํธํด๋ณผ๊น์?
์ ๋์ํ๋ค์! ์ด๋ ๊ฒ ์คํ ๋ฆฌ๋ณด๋๋ฅผ ํตํด Tap Gesture Recognizer๋ฅผ ์ํ๋ ๋ทฐ์ ์ถ๊ฐํ๊ณ IBAction์ ์ ์ํด ์ํ๋ ๋ก์ง์ ์ํํ ์ ์์ต๋๋ค.
์ฝ๋๋ก ์ถ๊ฐํ๊ธฐ
์คํ ๋ฆฌ๋ณด๋์์ ์ถ๊ฐํ๋ Tap Gesture Recognizer๋ฅผ ์ญ์ ํ๊ณ ๋ค์ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค. TapGestureRecognizer๋ฅผ ์ฌ์ฉํ๊ธฐ์ํด์๋ UIGestureRecognizerDelegate๋ฅผ ์ฑํํด์ผํฉ๋๋ค. ์ ์ค์ฒ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋ทฐ ์ปจํธ๋กค๋ฌ์์ ์์๋ฐ์ ์ ์ํ๊ธฐ ์ํด์์ ๋๋ค.
extension ViewController: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
return true
}
}
class ViewController: UIViewController {
@IBOutlet weak var resultLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let tapGestureRecognizer = UITapGestureRecognizer()
tapGestureRecognizer.delegate = self
self.view.addGestureRecognizer(tapGestureRecognizer)
}
}
๊ทธ๋ฆฌ๊ณ viewDidLoad์ Tap Gesture Recognizer๋ฅผ ์ถ๊ฐํด์ฃผ๋ ์์ ์ ์ค์ ํฉ๋๋ค.
์ด์ ํ๋กํ ์ฝ์ UITapGestureRecognizer์ gestureRecognizer ๋ฉ์๋์ ์ ์ํด์ฃผ๋ฉด ๋ฉ๋๋ค. ์คํ ๋ฆฌ๋ณด๋์์ ์ ์ํ๋ IBAction์ ๋ก์ง์ ๊ทธ๋๋ก ์ฎ๊ฒจ์ค๋ฉด ๋๊ฒ ์ฃ ? ์ด๋ฒ์๋ sender๋ผ๋ ์ธ์๊ฐ ์์ง๋ง touch ์ธ์๋ฅผ ํตํด location์ ์์๋ผ ์ ์์ต๋๋ค.
extension ViewController: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
resultLabel.text = (self.view.hitTest(touch.location(in: self.view), with: nil) as? UILabel)?.text ?? "NONE"
resultLabel.sizeToFit()
return true
}
}
๊ทธ๋ผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋์ง ํ ์คํธํด๋ณด์ฃ !
์คํ ๋ฆฌ๋ณด๋๋ก ์ถ๊ฐํ์ ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๋์ํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ด๋ฒ ํฌ์คํธ์์๋ ํญ ์ด๋ฒคํธ๋ฅผ ์ธ์ํ๋ UITapGestureRecognizer๋ฅผ ์คํ ๋ฆฌ๋ณด๋๋ก, ์ฝ๋๋ก ์ถ๊ฐํด๋ณด์์ต๋๋ค. ํญ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ๋ฉด์ ์ฌ์ฉ์๊ฐ ๊ฐ์ฅ ๋ง์ด ํ๋ ๋์์ด๋ ์ด๋์๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค!
'๐ ์์ด-์ค-์์ค > ๐ฑ iOS ๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote