## ๐จโ๐ฌ ์คํ 1
```swift
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if !isUserInteractionEnabled || isHidden || alpha <= 0.01 {
return nil
}
if self.point(inside: point, with: event) {
for subview in subviews.reversed() {
let convertedPoint = subview.convert(point, from: self)
if let hitTestView = subview.hitTest(convertedPoint, with: event) {
return hitTestView
}
}
return self
}
return nil
}
```
- ์ฐ๋ฆฌ๊ฐ orangeView ์์ ํ ์ง์ ์ ํฐ์นํ์ ๋, UIKit ์ ์ด๋ค ๋ทฐ์ hitTest ๋ฅผ ๊ฐ์ฅ ๋จผ์ ํธ์ถํ ๊น์?
- hitTest ๊ฐ ํธ์ถ ๋์์ ๋, ์ฝ๋์ ๋ด๋ถ ํ๋ฆ์ด ์ด๋ ํ ์ง ๋ ์ฌ๋ ค๋ด
์๋ค.
- hitTest๋ฅผ overrideํ๊ธฐ ์ํด ๊ฐ View๋ฅผ CustomView ํ์
์ผ๋ก ์ง์ ํฉ๋๋ค.
- hitTest๋ฅผ override ํ๊ณ , ์์ ์ฝ๋๋ก ๋์ฒดํด๋ด
์๋ค.
- ํฐ์นํ ์์น์ ๊ฐ์ฅ ์์ ๋ทฐ๋ฅผ ์ฝ์์ฐฝ์ print ํ ์ ์๋๋ก, hitTest๋ฅผ ์ฝ๋ ๋ด๋ถ๋ฅผ ์์ ํด๋ด
์๋ค.
```swift
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if !isUserInteractionEnabled || isHidden || alpha <= 0.01 {
return nil
}
if self.point(inside: point, with: event) {
for subview in subviews.reversed() {
let convertedPoint = subview.convert(point, from: self)
if let hitTestView = subview.hitTest(convertedPoint, with: event) {
print("background : \(String(describing: hitTestView.backgroundColor?.accessibilityName))")
return hitTestView
}
}
if !subviews.isEmpty {
print("background2 : \(String(describing: self.backgroundColor?.accessibilityName))")
}
return self
}
return nil
}
```
- ๋ค์ ์์น๋ฅผ ํฐ์นํ๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๋์จ ๊ณผ์ ์ ์ถ๋ก ํด๋ด
์๋ค.
- orangeView ์๋ฅผ ํฐ์น
์ค๋ ์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
- greenView ์๋ฅผ ํฐ์น
๊ทธ๋ฆฐ์ ์ถ๋ ฅํฉ๋๋ค.
- purpleView ์๋ฅผ ํฐ์น (์ฃผ๋ชฉ!)
- ๊ฒน์ณ ์๋ ๋ถ๋ถ์ ํฐ์นํ ๊ฒฝ์ฐ
์ถ๋ ฅ์ด ๋ฉ๋๋ค
- ๊ฒน์ณ์์ง ์์ ๋ถ๋ถ์ ํฐ์นํ ๊ฒฝ์ฐ
์ถ๋ ฅ๋์ง ์์ต๋๋ค.
- ์ ๊ทธ๋ฌํ ๊ฒฐ๊ณผ๊ฐ ์ผ์ด๋ฌ์๊น์?
`hitTest(_:with:)` ๋ฉ์๋๋ ํน์ ์ขํ๊ฐ ๋ทฐ์ ์์ญ์ ์ํ๋์ง๋ฅผ ๊ฒ์ฌ(ex. `point(inside:with:)`์ด์ฉ)ํ๊ณ , ํด๋น ๋ทฐ๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ๋, `hitTest(_:with:)` ๋ฉ์๋๋ ๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ์ ์ต์์ ๋ทฐ๋ถํฐ ์์ํ์ฌ ํ์ ๋ทฐ๋ค์ ๊ฒ์ฌํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฒํผ์ด ๋ทฐ์ ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋ ์์น๋ฅผ ํด๋ฆญํ์ ๋, ํด๋น ์์น์ ๋ํ ํฐ์น ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ๋ทฐ๋ฅผ ์ฐพ๋๋ฐ ์คํจํ๊ฒ ๋ฉ๋๋ค.
- blueView ์๋ฅผ ํฐ์น
- BlueView์๋ UIButton์ ์ฌ๋ฆฐ ํ, ๋ฐ์ฏค ๊ฑธ์น๋๋ก ๊ตฌ์ฑํฉ๋๋ค.
- ์ด๋ BlueView์ ๊ฒน์น์ง ์์ Button์ ์์ญ์ ํฐ์นํ์ ๋ ์ด๋ค ์ผ์ด ์ผ์ด๋ ๊น์?
- ํฐ์น๊ฐ ๋์ง ์์ต๋๋ค.
- ์ ๊ทธ๋ฌํ ๊ฒฐ๊ณผ๊ฐ ์ผ์ด๋ฌ์๊น์?
- ์์ ๋์ผํ ์ด์
### ๋ฉ์๋
[**point(inside:with:)**](https://developer.apple.com/documentation/uikit/uiview/1622533-point)
์์ ์์ ์ง์ ๋ ์ง์ ์ด ํฌํจ๋์ด ์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ bool ๊ฐ์ ๋ฐํ
return value: ํฌ์ธํธ๊ฐ ์์ ์์ bound ์์ ์์ผ๋ฉด true, ์๋๋ฉด false