Canvas Zoom-In/Out

Canvas์— ๊ด€ํ•˜์—ฌ ํ•œ๋ฒˆ ์งˆ๋ฌธ๊ธ€์„ ์˜ฌ๋ ธ์—ˆ์ง€๋งŒ, ์ถ”๊ฐ€๋กœ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์–ด์„œ ๋‹ค์‹œํ•œ๋ฒˆ ๋ฌธ์˜๊ธ€ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ž์ฃผ ์˜ฌ๋ฆฐ์  ์‚ฌ๊ณผ๋“œ๋ ค์š” ใ… _ใ… 

Canvas๋ฅผ ์ด์šฉํ•ด์„œ Tile Map Design ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ์ค‘ ์ž…๋‹ˆ๋‹ค.
์ œ๋ชฉ๊ณผ ๊ฐ™์ด Zoom In ๊ณผ Out์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์จ์•ผํ•ด์„œ ์ž๋ฃŒ๋ฅผ ์ฐพ๊ณ ์žˆ๋Š”๋ฐ,
์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ค์šด๊ฒƒ ๊ฐ™์•„ ๋ฌธ์˜ ๋“œ๋ฆฝ๋‹ˆ๋‹ค..!

(1) ContentPresenter๋ฅผ ์ด์šฉํ•ด Binding ์ฒ˜๋ฆฌ๋ฅผ ํ•ด๋ณด์•˜์ง€๋งŒ, Tiles ํ‘œํ˜„์„ ํ•˜๊ธฐ์œ„ํ•ด ๋งŽ์€์–‘์˜ Child๋ฅผ Add ํ•ด์•ผ ํ•˜๋‹ˆ UI์ชฝ ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•˜๊ฒŒ ๊ฑธ๋ ค ์ด๋ฐฉ๋ฒ•์€ ๋ˆ„๋ฝ์‹œ์ผฐ์—ˆ์Šต๋‹ˆ๋‹ค.
image

(2) Tiles ํ‘œํ˜„์„ VisualBrush๋กœ ๋ฐ”๊พธ๋ ค๊ณ  ํ•˜๋‹ˆ Canvas ์ž์ฒด๊ฐ€ Binding์ด ๋˜์ง€๋Š” ์•Š๋”๊ตฐ์š”, ์—ฌ๊ธฐ์— ์ถ”๊ฐ€๋กœ Zoom-In/Out์„ ๋„ฃ๊ณ  ์‹ถ์€ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.
image

1๊ฐœ์˜ ์ข‹์•„์š”

๊ฐœ์ฒด๊ฐ€ ๋งŽ์ง€ ์•Š์„ ๊ฒฝ์šฐ Canvas๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋Š”๊ฒŒ ๊ฐ€์žฅ ๊ฐœ๋ฐœ ๋น„์šฉ์ด ์ ์„ ๋“ฏ ์‹ถ๊ณ ์š”,

Canvas๋ฅผ ์ด์šฉํ•˜๋ฉด์„œ ์คŒ์ธ/์คŒ์•„์›ƒ์˜ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„์€ ViewPort๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Canvas๋ฅผ ViewBox๋กœ ๊ฐ์‹ธ์„œ ์คŒ์ธ/์คŒ์•„์›ƒ์„ ์•„๋งˆ ๊ตฌํ˜„๋„ ๋  ๊ฒ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๊ฐœ์ฒด๊ฐ€ ๋งŽ์•„ ๋А๋ฆฌ๋‹ค๋ฉด ์ง์ ‘ ๊ทธ๋ฆฌ๋Š”๊ฒƒ ๋˜ํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

FrameworkElement์˜ OnRender() ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์„œ ์ธ์ž์˜ DrawingContext๋ฅผ ์ด์šฉํ•ด ๊ทธ๋ฆฌ๊ธฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๊ฐœ์˜ ์ข‹์•„์š”