Hit Testing
๊ทธ๋ผ ํฐ์น๊ฐ ์ด๋์ ๋ฐ์ํ๋์ง๋ ์ด๋ป๊ฒ ์ ์ ์์๊น? ์ฆ, ํฐ์น๊ฐ ๋ฐ์ํ ์์ ์, ์ด๋ป๊ฒ ๋ด๊ฐ ๋๋ฅธ ๊ฐ์ฅ ์์ ๊ฐ์ฒด(์๋จ์ view ๊ณ์ธต์์ top์ ๋งํจ)๋ฅผ ํ๋จํ ์ ์์๊น? ์ฌ๊ธฐ์ ์ด๋ฒคํธ์ ๋ฐ์ํ ๊ฐ์ฅ ์์ ๊ฐ์ฒด๋ฅผ first Responder
๋ผ ํ๋ค.
Hit Test ์คํ ์์
๊ทธ๋ฆผ์ด ์ด๋ ค์ธ ์ ์๋๋ฐ, ์ฝ๊ฒ ์ค๋ช ํด๋ณด๊ฒ ๋ค. ์์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ฌ์ฉ์๊ฐ ํน์ View ์์๋ฅผ ์ ํํ๊ณ , ์ด๋ํ ๋ค, ๋ผ๋ ์์ ์ ํ๊ณ ์๋ค. ์ด ๊ฐ๊ฐ์ ๋จ๊ณ์์ ์๋์๋ ์ด๋ค ๋์๋ค์ด ์ด๋ฃจ์ด์ง๋์ง ์ ํ์๋ค. Hit test๋ ์ด ์์ ์์, ๊ฐ์ฅ ์ฒ์ ์คํ๋๋ค. ์ฆ, ์ฌ์ฉ์๊ฐ ํฐ์น๋ฅผ ์คํํ๋ ์๊ฐ, Hit test๋ฅผ ํตํด first responder๊ฐ ์ด๋ค ๋ ์์ธ์ง ํ์ธํ๋ค.
๊ทธ๋ฆฌ๊ณ drag๋ฅผ ํ๋ฉด์ ์ผ์ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉ์ ์ด๋ฒคํธ๊ฐ ๊ณ์ ๋ฐ์ํ๋ค. ๊ทธ๋์ ํ์ดํ๊ฐ 3๊ฐ์ด๋ค. ์ด ์ด๋ฒคํธ๋ค์ ์ฒซ๋ฒ์งธ hit test์ ๊ฒฐ๊ณผ์ธ first responder์๊ฒ ์ ๋ฌ๋๋ค.
๋ง์ง๋ง์ผ๋ก ํฐ์น๋ฅผ ๋ ๊ฒฝ์ฐ, ๋ event๊ฐ first responder๋ก ์ ๋ฌ๋๋ค. ์ด๋์ฉ ์ฝ์ฃ ?
Hit Test ์๋ ๋ฐฉ์
ํด๋น ์ฝ๋๋ ๊ฐ๋ตํ๊ฒ ๋์์ ๋ํ๋ด ๋ณธ ๊ฒ์ด๋ค. ์ฐธ๊ณ ๋ก subview๋ค์ ํ์์ ์์ ์๋ก array์ ์๋์ ์๋ค. (stack ๊ตฌ์กฐ์ด๋ค.) ์๊ณ ๋ฆฌ์ฆ์์ ์๊ฐํด์ผ ํ๋ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํด๋น ์๊ณ ๋ฆฌ์ฆ์
UIApplication
์์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ํ์๋ก ์ ๋ฌํ๋ค.UIApplication
์ first responder๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
- ๋ด๋ถ์ ๋ค์ด์์ง ์์ผ๋ฉด pass ํ๋ค.
- ๋ด๋ถ์ ๋ค์ด์๋๋ฐ ํ์ view๊ฐ ์๋ค๋ฉด (๋ด๊ฐ ๊ฐ์ฅ ์์ ๋ทฐ) ์์ ์ ๋ฐํํ๋ค.
- ํ์ view๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ด๊ฐ ๊ฐ์ฅ ์์ ์์ง ์์์๋ ์์ผ๋ฏ๋ก ํ์ View๋ก Hit Test๋ฅผ ์ ๋ฌํ๋ค.
์ด๋ฐ ์๊ณ ๋ฆฌ์ฆ์ Reverse Pre-order depth-first traversal algorithm
์ด๋ผ ํ๋ค๊ณ ํ๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ์ค DFS์ ํฌ๊ฒ ๋ค๋ฅธ์ ์ด ์๋ค๊ณ ์๊ฐํด์ ๊น๊ฒ ์์ฑํ์ง๋ ์์๋ค. ๋ ๋ช๊ฐ์ง ๋ ๊ณ ๋ คํ๋ ์ฌํญ์ด ์๊ธดํ๋ฐ, ์ค์ํ์ง ์์์ ์ ๊ฑฐํ๋ค. ๊ณ ๋ ค ์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค.
- View๊ฐ hidden์ธ๊ฐ?
- UserInteraction์ด Enable์ธ๊ฐ?
- Alpha ์์ค์ด ์ผ์ ์ด์ (0.01 up) ์ธ๊ฐ?
- ํด๋น ์ด๋ฒคํธ๊ฐ ํฌํจ๋๋๊ฐ?