์ฐ์ ํ๋ฅญํ ๋์๊ด์ ๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ ๋นจ๋ฆฌ ์ฐพ์์ผ๋ฉด ์ฌ์ ํ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ฐฐ์ฐ๊ณ ์์ต๋๋ค. ํ๋์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ด ์์ง๋ง 100๊ฐ์ ๋ฐ์ดํฐ ํฌ์ธํธ๊ฐ ์๋ ๊ฐ๋จํ ๊บพ์์ ํ ์ฐจํธ ๋๋ ๋ง๋ ์ฐจํธ๋ฅผ ๊ทธ๋ฆฌ๋ ์ค์ ์ ํ๋ ๋ฐ ๋์์ด ํ์ํ์ง๋ง ์ฐจํธ๊ฐ ํ์๋ ๋ ์ด๋ฌํ 100๊ฐ์ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ๋ชจ๋ ํ์ํ๋ ๋์ ๋ง์ง๋ง 10๊ฐ ๋ฐ์ดํฐ ํฌ์ธํธ ๋๋ ์ฒ์ 10๊ฐ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ํ์ํ๋๋ก ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํ ๋ค์ ์ฌ์ฉ์๋ ๋๋จธ์ง๋ฅผ ๋ณด๊ธฐ ์ํด ์คํฌ๋กคํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ค์ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? Thnx
์ ์์ ๊ธ๊ณผ ๋น์ทํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ๋ด๊ฐ ์์ฒญํ ๊ฒ์ ์ฐจํธ๋ฅผ ๋ค๋ก ์ ํํ๋ฉด์ ์ค์ผ์ผ/์คํฌ๋กค ์คํ์ ์ํ๋ฅผ ๋ณต์ํ๋ ๊ฒ์ ๋๋ค. ๋น์ ์ ์ด๊ฒ์ ๋ณผ ์ ์์ต๋๋ค : https://github.com/danielgindi/ios-charts/issues/226
๋น ๋ฅธ ์๋ต์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ด์ ์ ํด๋น ๊ฒ์๋ฌผ์ ๋ณด์์ง๋ง ์ํ๋ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ๋ฌด์์ ์ค์ ํด์ผ ํ ์ง ์ฌ์ ํ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋๋ 1๊ฐ์ VC๋ง ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ๋ ๋ฒ์งธ VC๋ฅผ ์ด์ํ ํ์๊ฐ ์์ต๋๋ค. ๋์ผํ ์ฝ๋๊ฐ ์์ผ๋ฉด ํฌ๊ฒ ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
์์ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์์ฃผ ๋นจ๋ฆฌ ํด๊ฒฐ์ฑ ์ ๋ด๋๊ธฐ๋ ์ฌ์ด ์ผ์ด ์๋๋๋ค.
๋ด๊ฐ ๋น์ ์ด๋ผ๋ฉด ๋จผ์ panGestureRecognized
๋ฐ pinchGestureRecognized
๋ฅผ ๋ณด๊ณ ํ๋/์ถ์/์คํฌ๋กค์ด ๊ตฌํ๋๋ ๋ฐฉ์์ ์ดํดํ ๊ฒ์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํฐ์น ์์น์ ๋ํ ๊ณ์ฐ์ ์ํํ๊ณ ์๋ก์ด ์ค์ผ์ผ/๋ณํ ๊ฐ์ ์ป๊ณ CGAffineTransform
ํ๊ณ viewPortHandler.refresh()
๋ฅผ ํตํด ๋งคํธ๋ฆญ์ค๋ฅผ ์๋ก ๊ณ ์ณ์ผ ํฉ๋๋ค.
ChartTransformer
๋ฐ ChartViewPortHandler
์๋ ๋ง์ API๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ๊ฐ๊ณผ ํ๋ฉด ํฝ์
์ ์๋ก ๋ณํํฉ๋๋ค.
์ค์ผ์ผ ๋ ๋ฒจ์ด ์ฃผ์ด์ง๋ฉด ์ฒ์/๋ง์ง๋ง 10๊ฐ์ ๋ฐ์ดํฐ ํฌ์ธํธ ๋ณํ ๊ฐ์ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํด์ผ ํฉ๋๋ค. ๋ฐฐ์จ ์์ค์ด ์ฃผ์ด์ง ํน์ ๋ฐ์ดํฐ ํฌ์ธํธ ๊ฐ์ ์ป์ ์ ์๋์ง ์ถ์ธกํ ์ ์์ต๋๋ค. viewPortHandler.contentRect์ ํ์ํ ๋ฐ์ดํฐ๋ง ํฌํจํ๋๋ก ๊ณ์ฐ์ ์๋ํด ๋ณด์ญ์์ค(์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ์ ๋ง์ง๋ง ๋ฐ์ดํฐ ํฌ์ธํธ x ๊ฐ์ ํตํด). ๊ทธ๋ฌ๋ฉด ๊ณ์ฐํ ์ ์์ต๋๋ค. ๊ฒฝ๊ณ์ ์คํ์ , ๊ทธ๋ฆฌ๊ณ ํ๋ ฌ์ ์๋ก ๊ณ ์นฉ๋๋ค.
๋ ๋์ ๋ต๋ณ์ ํ์ํฉ๋๋ค:) ์ ์ ์๊ฐ์ ๋ด์ด ๊ทธ๊ฒ์ ๋ํด ์๊ฐํ๊ณ ์์ ์ ๊ณ์ํฉ๋๋ค.
๋ค์์ ํตํด ํ๋ ฌ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ดํดํด์ผ ํฉ๋๋ค.
self._viewPortHandler.restrainViewPort(offsetLeft: left, offsetTop: top, offsetRight: right, offsetBottom: bottom)
prepareOffsetMatrix()
prepareValuePxMatrix()
์กฐ๊ธ ๊ฐ์ง๊ณ ๋๋ค๊ฐ ์ด๊ฒ์ ๋ฌ์ฑํ ์ ์์์ต๋๋ค. ๊ทธ๊ฒ์ ์ค์ ๋ก ๊ฝค ์ง์ค์ ์ ๋๋ค.
chart.data = data; // This is the MAIN reason, data for the chart has to be set first before the next 2 steps otherwise they will just get ignored like nothing has been set.
// ์ต๋ x ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ 10์ผ๋ก ์ค์ ํฉ๋๋ค. ์ด๋ 100๊ฐ์ ๋ฐ์ดํฐ ํฌ์ธํธ์์ ๊บพ์์ ํ ๋๋ ๋ง๋ ์ฐจํธ์ ๋ํด 10๊ฐ์ ๋ฐ์ดํฐ ํฌ์ธํธ๋ง ํ์ํ๋ ค๋ ๊ฒ์
๋๋ค.
[์ฐจํธ setVisibleXRan geMaximum:10 ];
// ์ฐจํธ ๋ทฐ๋ฅผ ๋ด๊ฐ ๋ณด๊ณ ์ถ์ ๋ง์ง๋ง 10๊ฐ ํญ๋ชฉ์ธ X์ 90๊ฐ ์ธ๋ฑ์ค๋ก ์ด๋ํฉ๋๋ค. ์์๋๋ก ์๋ํฉ๋๋ค.
[์ฐจํธ ์ด๋ ViewToX:90 ];
์ข์ ์บ์น!
10๊ฐ์ ๋ฐ์ดํฐ ํฌ์ธํธ๋ง ํ์ํ๋๋ก ๋ณด๊ธฐ๋ฅผ '์ ๊ทธ'๊ณ ์ถ์ง ์์ผ๋ฉด viewDidLoad์์ ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
float xScale = totalPoints / initialPointsDisplayed;
[์ฐจํธ ์ค:xScale scaleY:1.0 x:0.0 y:0.0];
[self.chartView ์ด๋ veViewToX:totalPoints - initialPointsDisplayed];
@spauldingim ์์ ์ฝ๋๋ฅผ ๋ค์ ํธ์ถํ ๋ ๋๋ฌด ๋ฉ๋ฆฌ ํ๋๋๋ ๋ง๋ ์ฐจํธ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ค์ ํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋งค๋ฒ ๋จผ์ ์ถ์ํ์ฌ ์์ ํ์ต๋๋ค.
barChartView.zoom(scaleX: 0, scaleY: 0, x: 0, y: 0)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@spauldingim ์์ ์ฝ๋๋ฅผ ๋ค์ ํธ์ถํ ๋ ๋๋ฌด ๋ฉ๋ฆฌ ํ๋๋๋ ๋ง๋ ์ฐจํธ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ค์ ํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋งค๋ฒ ๋จผ์ ์ถ์ํ์ฌ ์์ ํ์ต๋๋ค.
barChartView.zoom(scaleX: 0, scaleY: 0, x: 0, y: 0)