์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค!
์ค๋์ ์ง์ ์ํ๋ ๋ชจ์์ ๊ทธ๋ฆด ์ ์๋ UIBezierPath๋ฅผ ๋์ฑ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ EasierPath์ ๋ํด์ ์์ ๋ณด๊ฒ ์ต๋๋ค.
๋ฐ๋ก ์์ํ ๊ฒ์~!
UIBezierPath
ํ์์ ์ํ๋ ๋ชจ์์ ์ง์ ์ปค์คํ ํด์ ๊ทธ๋ฆด ๋ UIBezierPath๋ฅผ ์์ฃผ ์ฌ์ฉ ํ์๋๋ฐ์.
๋จผ์ UIBezierPath๋ฅผ ์ด์ฉํด์ ํญ์๋ฆฌ ๋ชจ์์ ๊ทธ๋ฆฌ๋ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
1. UIBezierPath ์ธ์คํด์ค๋ฅผ ์์ฑํด ๊ทธ๋ ค์ค๋ค.
let bezierPath:UIBezierPath = UIBezierPath()
bezierPath.move(to: CGPoint(x: 100, y: 100))
bezierPath.addLine(to: CGPoint(x: 200, y: 100))
bezierPath.addCurve(to: CGPoint(x: 200, y: 300), controlPoint1: CGPoint(x: 250, y: 150), controlPoint2: CGPoint(x: 175, y: 250))
bezierPath.addLine(to: CGPoint(x:100,y:300))
bezierPath.addCurve(to: CGPoint(x: 100, y: 100), controlPoint1: CGPoint(x: 125, y: 250), controlPoint2: CGPoint(x: 50, y: 150))
bezierPath.close()
2. CAShapeLayer์ path๋ฅผ UIBezierPath.cgPath๋ก ์ง์ ํ๊ณ , ์ํ๋ ์คํ์ผ์ ์ง์ ํ๋ค.
let caShapeLayer:CAShapeLayer = CAShapeLayer()
caShapeLayer.path = bezierPath.cgPath
caShapeLayer.strokeColor = UIColor.white.cgColor
caShapeLayer.fillColor = UIColor.systemPink.cgColor
caShapeLayer.lineWidth = 3
3. view์ subLayer์ ์ถ๊ฐํด ์ค๋ค.
view.layer.addSublayer(caShapeLayer)
UIBezierPath์ ๋จ์
์ ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ UIBezierPath๋ ๋ช ๊ฐ์ง ๋จ์ ์ด ์์์ต๋๋ค.
1. ์ ์ ์ถ๊ฐํ ๋์ ๋ ์ง์ ์ ๋จธ๋ฆฟ ์์ผ๋ก ๊ธฐ์ตํด์ผ ํ๋ค.
์ ์ด๋ ๊ณก์ ์ ๊ทธ๋ฆด ๋ ์ ์ ์ด๋ ์ง์ ์์ ๋๋ฌ๋์ง๋ฅผ ๊ธฐ์ตํ๊ณ ๊ทธ์ ๋ง๊ฒ ์ง์ ์ ์ ํด ์ค์ผ ํ๋๋ฐ์.
์ด๊ฒ์ ๊ทธ๋ฆด ์์ด ๋ง์ผ๋ฉด ๋ง์ ์๋ก ๊ธฐ์ต ํด์ผํ ์์ด ๋ง์์ง๊ณ , ์ฝ๋๋ฅผ ํตํด ํ์ธ ํ๊ธฐ๊ฐ ๋๋ฌด ๋ถ๋ถ๋ช ํ์ต๋๋ค.
2. ์์ ์ง์ ์ด ๋ฌ๋ผ์ง๋ฉด ๋ชจ๋ ์ง์ ์ ์์ ํด ์ค์ผ ํ๋ค.
๊ฐ ์ ์ด๋, ๊ณก์ ์ ๊ทธ๋ฆฌ๋ ์ง์ ์ ์์ ์ง์ ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ ค์ฃผ๊ธฐ ๋๋ฌธ์ ๋ง์ฝ ์์ ์ง์ ์ด ๋ฌ๋ผ์ง๋ค๋ฉด ๋ชจ๋ ์ ์ ์ง์ ์ ๋ณ๊ฒฝํด ์ค์ผ ํ์ต๋๋ค.
๋ง์ฝ ๊ทธ๋ ๊ฒ ํ์ง ์๊ธฐ ์ํด์ ํน์ ๋ณ์๋ฅผ ์ฌ์ฉํด ๊ฐ์ ๋ด์ ๋ค์์ ์ง์ ํด ์ฃผ๋ฉด ๋์์ง๋ง ์ด๊ฒ ๋ํ ๋ฒ๊ฑฐ๋ก์ด ์ผ์ด์์ต๋๋ค.
3. CAShapeLayer๋ UIView๋ฅผ ์์ฑํด ์ค์ผ ํ๋ค.
View์ UIBezierPath๋ฅผ ๋์ฐ๊ธฐ ์ํด์ CAShapeLayer๋ฅผ ์์ฑํด ๋ง๋ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด ์ฃผ๊ฑฐ๋,
UIView๋ฅผ ์์ฑํ์ฌ draw๋ฉ์๋์ ์ง์ ๊ทธ๋ ค์ค์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์์ต๋๋ค.
EasierPath
EasierPath๋ ์ UIBezierPath์ ๋จ์ ๋ค์ ๋ณด์ํ๊ณ ๋์ฑ ์ง๊ด์ ์ผ๋ก ์ฌ์ฉํ ์๋๋ก ๋ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋๋ค.
(์ฌ์ฉํด ๋ณด์๊ณ Starโญ๏ธ ํ๋ฒ์ฉ๋ง ๋ถํ ๋๋ฆฝ๋๋ค ใ ใ )
์์์ ๊ทธ๋ฆฐ ํญ์๋ฆฌ ๋ชจ์์ EasierPath๋ฅผ ์ฌ์ฉํด ๊ทธ๋ ค ๋ณด๊ฒ ์ต๋๋ค.
1. EasierPath ์ธ์คํด์ค๋ฅผ ์์ฑํด ๊ทธ๋ ค์ค๋ค.
let easierPath = EasierPath(100,100)
.right(100)
.curve(to: .down(200), .bezier(.rightDown(50,50), .leftDown(25,150)))
.left(100)
.curve(to:.up(200), .bezier(.rightUp(25,50), .leftUp(50,150)))
2. ์ํ๋ ์คํ์ผ์ Layer๋ฅผ ๋ง๋ค์ด ์ค๋ค.
let layer = easierPath.makeLayer(lineWidth:3,lineColor: .white,fillColor:.systemPink)
3. view์ subLayer์ ์ถ๊ฐํด ์ค๋ค.
view.layer.addSublayer(layer)
UIBezierPath ๋จ์ ๋ณด์
1. ์ ์ ์ถ๊ฐํ ๋ ๋ ์ง์ ์ ๊ธฐ์ตํ์ง ์์๋ ๋๋ค.
์ EasierPath๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ ์ด๋ ์ง์ ์์ ๋๋ฌ๋์ง๋ฅผ ๊ตณ์ด ๊ธฐ์ตํ์ง ์๊ณ , ์ด๋ ๋ฐฉํฅ์ผ๋ก ์ ์ ๊ทธ๋ฆด ๊ฒ์ธ์ง๋ง ์ง์ ํด ์ฃผ๋ฉด ๋ฉ๋๋ค.
2. ์์ ์ง์ ์ด ๋ฌ๋ผ ์ง๋๋ผ๋ ์ฝ๋๋ ๊ทธ๋๋ก๋ค.
์์ ์ง์ ์ด ๋ฌ๋ผ์ง๋๋ผ๋ ํด๋น ์ง์ ์ ๊ธฐ์ค์ผ๋ก ๋ฐฉํฅ์ ๋ฐ๋ผ ๊ทธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๊ฐ ์ง์ ์ ๋ณ๊ฒฝํด ์ค ํ์๊ฐ ์์ต๋๋ค.
3. makeLayer ๋ฉ์๋๋ฅผ ์ฌ์ฉํด Layer๋ฅผ ๋ง๋ ๋ค.
๊ตณ์ด CAShapeLayer๋ UIView๋ฅผ ์์ฑํด ์ฃผ์ง ์์๋ EasierPath ๋ด์ makeLayer ๋ฉ์๋๋ฅผ ์ฌ์ฉํด style์ ์ง์ ํด ์ฃผ๋ฉด layer๋ฅผ ๋ง๋ค์ด ์ค ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ์ค๋์ UIBezierPath์ ๋จ์ ์ ๋ณด์ํด ์ฌ์ฉํ๊ธฐ ์ฝ๊ฒ ์ ๊ฐ ์ง์ ๋ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ EasierPath์ ๋ํด ๊ธ์ ์ ๋ฆฌํด ๋ณด์๋๋ฐ์.
EasierPath๋ฅผ ๋์ฑ ์ฝ๊ณ , ๊ฐ๊ฒฐํ๊ฒ ๋๋ ๊ณ ์น ๋ถ๋ถ์ด ์๋ค๋ฉด ์ธ์ ๋ Issue์ Pull Request๋ ํ์์ ๋๋ค!!
๋ํ UI๋ฅผ ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ , ํจ์จ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค์ด ๋๊ฐ๋ UISugarโก๏ธ Organization์ ๋ง๋ค๊ฒ ๋์๋๋ฐ์.
ํจ๊ป ํ๊ณ ์ถ์ ๋ถ์ด ๊ณ์๋ค๋ฉด ๋๊ธ ๋๋ pull request๋ฅผ ๋ ๋ ค์ฃผ์ธ์!
๋๊ธ