Make a single touch drawing app in Framer. 프래이머를 이용한 그림판 만들기.

View this thread on: d.buzz | hive.blog | peakd.com | ecency.com
·@songgmo·
0.000 HBD
Make a single touch drawing app in Framer. 프래이머를 이용한 그림판 만들기.
<html>
<p>프래이머를 이용해서 그림판을 만들어 볼 것입니다.</p>
<p>동그란 레이어를 이용해서 터치가 일어난 부분에 점을 찍는 형식으로</p>
<p>그리는 것은 한계가 있습니다.&nbsp;</p>
<p><br></p>
<p>여기서는 svg 를 이용하여 벡터 그림을 그리도록 하겠습니다.</p>
<p><br></p>
<pre><code>frame_l = new Layer<br>
	size : Screen.size<br>
	backgroundColor: "ddddcc"</code></pre>
<p><br></p>
<p>먼저 드로잉할 레이어를 만들어줍니다.</p>
<p>화면크기와 같게 해줍니다.</p>
<p><br></p>
<pre><code>svgA = []<br>
tmpSvg = new SVGLayer<br>
	parent: frame_l<br>
	backgroundColor: null</code></pre>
<p><br></p>
<p>SVG 를 저장해둘 배열을 하나 만들어서 각 선들을 저장해둘 것입니다.</p>
<p>선이 그려질 동안 보여질 임시용 SVG 레이어를 생성합니다.&nbsp;</p>
<p><br></p>
<pre><code>drawing = false	<br>
lineData = ""</code></pre>
<p><br>
드로잉 상태를 구분할 변수와&nbsp;</p>
<p>선이 그려지는 정보를 가질 SVG 데이터 &nbsp;변수를 선언합니다.</p>
<p><br></p>
<pre><code>draw = (e)-&gt;<br>
	x = Events.touchEvent(e).clientX<br>
	y = Events.touchEvent(e).clientY<br>
	return x+" "+y<br>
</code></pre>
<p><br></p>
<p>이벤트 값을 이용하여 좌표를 문자열로 반환하는 함수를 생성합니다.</p>
<p><br></p>
<pre><code>frame_l.on Events.TouchStart,(e) -&gt;<br>
	drawing = true<br>
	lineData = "M "+draw(e)</code></pre>
<p><br></p>
<p>처음 터치가 시작되면 M 으로 시작하는 좌표를 SVG 데이터변수에 저장합니다.</p>
<p>draw 함수를 이용해 좌표값을 설정합니다.</p>
<p><br></p>
<pre><code>frame_l.on Events.TouchMove,(e) -&gt;<br>
	lineData += " L "+draw(e)<br>
	if drawing then tmpSvg.svg = "&lt;svg&gt;&lt;path d='"+lineData+"' fill='transparent' stroke='black' /&gt;"</code></pre>
<p><br></p>
<p>터치 손가락을 움직이면 선이 그려집니다.</p>
<p>선이 그려지는 부분은 L 로 시작하는 좌표값을 저장합니다.</p>
<p>drawing 중일때는 tmpSvg 레이어에 저장되는 좌표 데이터를 svg 값에 넣어줍니다.</p>
<p>이렇게 하면 그림이 그려질때의 선을 즉시 보여줄 수 있습니다.</p>
<p>이 부분이 없으면 손을 떼야만 선이 표시됩니다.</p>
<p><br></p>
<pre><code>frame_l.on Events.TouchEnd,(e) -&gt;<br>
	drawing = false	<br>
	if lineData.indexOf("L") isnt -1 <br>
		shape = new SVGLayer<br>
			svg: "&lt;svg&gt;&lt;path d='"+lineData+"' fill='transparent' stroke='black' /&gt;"<br>
			backgroundColor: null<br>
			parent: frame_l	<br>
		svgA.push(shape)<br>
		tmpSvg.svg = ""<br>
</code></pre>
<p><br></p>
<p>터치를 떼면 &nbsp;drawing 을 끝내고 저장된 그림 데이터를&nbsp;</p>
<p>svgLayer 를 이용해서 선으로 생성합니다.</p>
<p>생성된 레이어는 svgA 에 저장합니다.</p>
<p>임시로 그려진 선 데이터는 삭제합니다.</p>
<p><br></p>
<p>그림판이 완성되었습니다.</p>
<p>선이 그려진 레이어들을 각각 저장하고 있어서&nbsp;</p>
<p>이후에 svg 레이어를 하나씩 지우면 그리기 취소 기능을 만들 수 있습니다.</p>
<p><br></p>
<p>Framer 에서 SVG 를 이용한 그림판 만드는 방법이었습니다.</p>
<p><br></p>
<p>감사합니다.</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
</html>
👍 , , , ,