Squircle ์ด๋?
ํ๋ฌํฐ๋ก sliver ๋ฆฌ์คํธ๋ฅผ ๊ตฌํํ๋ ์ค corner radius ๊ฐ์ ์ฃผ์ด ๋์ ๋ฅ๊ธ๊ฒ ๋ง๋๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ํ์ง๋ง ๋ง์ ์ค๊ธฐ๊ธฐ๋ก ๋๋ ค๋ณด๋ ๋ํธ๋จธ๋ฆฌ๊ฐ ๋ฌํ๊ฒ ๊ฐ์ ธ์๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค. ์ฑ ๋์์ธ์ด ์ ๋ฐ์ ์ผ๋ก "๋ฅ๊ธ๋ฅ๊ธ" ๋๋์ด ๋์ผํ๋๋ฐ ๋จผ๊ฐ SwiftUI์์ ๊ตฌํํ์ ๋๋ ๋๋์ด ๋ฌ๋๋ค.. ๋ถ๋ช
SwiftUI๋ CornerRadius๊ฐ๋ง ์ฃผ์ด๋ ๋ฅ๊ธ๋ฅ๊ธํ ๋๋์ด ์ด์์์๋ค. ๋ฐฑ๋ฌธ์ด๋ถ์ฌ์ผ๊ฒฌ, ๋ฐ๋ก ๊ฐ์ Corner Radius๋ฅผ ์ฃผ์ด SwiftUI์ Flutter๋ฅผ ๋น๊ตํด๋ณด์๋ค.
์ญ์ ์ ํ ๊ฐ
์๋ SwiftUI ์ฝ๋๋ก ์์ฑํ Rounded Container์ด๊ณ ์๋๋ํ๋ฌํฐ๋ก ์์ฑํ Rounded Container์ด๋ค. ์์ธํ ๋ค์ฌ๋ค๋ณด๋ฉด ํ๋ฌํฐ ๋ชจ์๋ฆฌ๊ฐ ๋ฌํ๊ฒ ๊ฐ์ ธ์์์ ํ์ธํ ์ ์๋ค. (์คํฌ๋ฆฐ์ท์ ์ฐ์ด์ ์ฐจ์ด๊ฐ ์๋ ์๋ ์์ง๋งใ
์ค๊ธฐ๊ธฐ๋ฅผ ๋๋ ค๋ณด๋ฉด ๋ถ๋ช
ํ ์ฐจ์ด๊ฐ ๋๋ค.) ์ ๋๊ฐ์ด corner radius ๊ฐ์ ์ฃผ์์์๋ SwiftUI์์ ๋ ๊ท์ฌ์ด ์ปจํ
์ด๋๊ฐ ๋ง๋ค์ด์ง๋๊ฑธ๊น?
์ ํ ๋ด๋ถ ์ฝ๋๋ก ๋ค์ด๊ฐ๋ณด์์ง๋ง ๊ฐ์ถฐ์ ธ์์ด์ ์ง์ ์ ์ธ ํ์ธ์ ํ ์ ์์๋ค. ํ์ง๋ง RoundedCornerStyle์ enum์ผ๋ก circular์ continuous๋ก ๋๋์ด์ ๊ตฌํํ ์ ์์๋๋ฐ flutter์ ๋ชจ์๋ฆฌ์ Squircle์ ์ ์ฉํ๋ฉด SwiftUI์ continuous์ ๊ฐ์ ํจ๊ณผ๋ฅผ ์ค ์ ์๋ค๋ ๊ฒ์ ์๊ฒ๋์๋ค. Squircle ์ด๋ ๋ฌด์์ธ์ง ์์๋ณด์
Squircle์ ์ฌ๊ฐํ๊ณผ ์ ์ฌ์ด์ ๋ํ์ผ๋ก ์ ์ ์ ์๋ก ์ฐ๊ฒฐํ ๋ ์์ ํ ๋ฅ๊ธ๊ฒ๋, ์ง์ ๋ ์๋ "์๋งํ๊ฒ"์ฐ๊ฒฐํ ๋ํ์ด๋ค. ์ด๋ ๋ชจ์๋ฆฌ ๊ตฌํ์ ์์ด์ ๋ณดํต ํ์์ฒ๋ผ ๊น์ด๊ฒ ๋๋๋ฐ Squircle์ ํ์๋ณด๋ค ๋ ์๋งํ๊ฒ ๊ณก์ ์ ๊ทธ๋ฆฌ๊ฒ ๋๋ค.
ํน์ ์ฌ๊ธฐ๊น์ง ์ฝ์ผ๋ฉด์ ์๋ ์ด๊ฒ ๋จผ์ฐจ์ด์ธ์ง ์ ํ๋ชจ๋ฅด๊ฒ ๋๋ฐ? ์ถ์ผ๋ฉด ์์ดํฐ์ด๋ ๋งฅ์ ์ด์ฉํ์ ๋์ ๋๋์ ์๊ฐํด๋ณด๋ฉด ์ข๋ค. ์ ํ์ ํ์ ์ด์ฉํ ๋ ๋ค๋ฅธ์ ํ๊ณผ ๋ค๋ฅด๊ฒ ๋ฌํ๊ฒ ๊ณก์ ๊ฐ์ด ์ด์์๋ ๋ถ๋ถ์ ๋๋ ์ ์๋ค. (์ฑ์ด๋ผ๋ ์ง, ์์ดํ ํ๋ก ์ผ์ด์ค๊ฐ์ ํ๋์จ์ด๋ ์ง) ์ค์ ๋ก ํผ๊ทธ๋ง ๊ณต์๋ธ๋ก๊ทธ์ ๋ฐ๋ฅด๋ฉด iOS๋์์ธ์์คํ
์ squircle์ด ํต์ฌ์ ์ผ๋ก ๋์
๋๋ค๊ณ ํ๋ค. RoundedCornerStyle.continuous๋ ์ด๋ฌํ ์ ํ์ ๋์์ธ ์ฒ ํ์ด ๋ค์ด๊ฐ ์์๋ผ๊ณ ๋ณผ ์ ์๋ค.
๊ทธ๋์ ๊ทธ๋ฐ์ง ์์ฝ๊ฒ๋ ๊ตฌ๊ธ์ด ๋ง๋ ํ๋ฌํฐ์์๋ ์ด๋ฌํ ๊ณก๋ฅ ๊ฐ์ ํ๋ ์์ํฌ ์ฐจ์์์ ์ ๊ณตํด์ฃผ์ง์๋๋ค. ํ์ง๋ง ๊ฐ๋ฐ์๋ ๋๊ตฌ๋ฅผ ํํ์ง ์๋๋ฒ, ์ง์ ๊ณก์ ์ ๊ทธ๋ฆผ์ผ๋ก์จ ํ๋ฌํฐ์์๋ iOS์ ๊ฐ์ ๊ณก๋ฅ ๊ฐ์ ์ด๋ฆด ์ ์๋ค. ํ๋ฌํฐ์์ Squircle ๊ตฌํ์ ์ํด์๋ quaraticBezierTo ๋ฉ์๋๊ฐ ์ฌ์ฉ๋๊ณ ์ด ๋ฉ์๋๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ ๋ช๊ฐ์ง ์ํ๊ฐ๋
์ ์ดํดํด์ผํ๋ค.
ํ์(elpise)๋ฐฉ์ ์
- ํฐ ๋ํ์ง์ ๋ ๊ฐ์ ์ (์ ์ )์ ์ฐ๊ณ ๋ ๊ฐ์ ์ ์ ์ค๋ก ์ฐ๊ฒฐํ๋ค๊ณ ์๊ฐํด๋ณด์
- ์ด ์ค์ ๋ง๋๊ธฐ๋ฅผ ์ต๋ํ๋ก๊ฒจ์ ์์ ๊ทธ๋ฆฌ๊ฒ ๋๋ฉด ํ์์ด ์๊ฒจ๋๋ค.
- ๋ฐ๋ผ์ ํ์์ด๋ 2๊ฐ์ ์ ์ ์ผ๋ก๋ถํฐ ๊ฑฐ๋ฆฌ์ ํฉ์ด ์ผ์ ํ ์ ์ ์งํฉ์ด๋ค.
2๊ฐ์ ์ ์ ๊ฑฐ๋ฆฌ์ ํฉ์ด ํ์์ด๋ผ๋ ๊ฒ์ ์์์ผ๋ก ํํํ๋ฉด ์์๊ฐ์ด ๋์ถํ ์ ์๋ค.
์ฝ๋๋ก ์์๊ฐ์ ํ์๋ฐฉ์ ์์ ์ด์ฉํด A์ ์์ B์ ์ผ๋ก ์ฐ๊ฒฐํ๋ ๊ณก์ ์ ๊ทธ๋ฆด ์ ์๋ค.
ํ์๋ฐฉ์ ์ ์ผ๋ฐํ๋ฅผ ํตํด Squircle ๋ฐฉ์ ์ ๊ตฌํ๊ธฐ
์ ํ๋์ํ์ P-norm์ ์ด์ฉํ๋ฉด ํ์๋ฐฉ์ ์์ ์ผ๋ฐํํ ์ ์๋ค. norm์ด๋ (๋ฒกํฐ)ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ๋
์์ด๋ค. ๋ฒกํฐ๋ ๋ณดํต ๋ฌผ๋ฆฌ์ ์ธ ๊ธธ์ด๋ฅผ ํตํด ํฌ๊ธฐ๋ฅผ ๋น๊ตํ ์ ์๋ค. ์ฆ norm์ ๋ฒกํฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ๋ ์ํ์ ๋๊ตฌ๋ผ๊ณ ํ ์ ์๋ค.
์ผ๋ฐ์ ์ธ ๋ฒกํฐ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๊ณต์์ 2-norm์ด๋ค. (0,0) ์์ (1, 3) ๋ฒกํฐ์ ๊ธธ์ด๋ ํผํ๊ณ ๋ผ์ค ๋ฐฉ์ ์์ ์ด์ฉํด์ ๋ฃจํธ10์์ ํ ์ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ฒกํฐ์ ๋ฒกํฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ธ ์ ๊ณผ ์ ์ฌ์ด ๊ฑฐ๋ฆฌ ๊ณต์์ ์ฌ์ฉํด์ ๋ฒกํฐ ์ฌ์ด ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๊ฒ ๋๋ค. ์ด๊ฒ 2-norm์ด๋ค. ์ฆ ๋ฒกํฐ๊ฑฐ๋ฆฌ ์ธก์ ์ ์์ด 2-norm์ ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ(์ผ๋ฐ์ ์ธ ์ต๋จ๊ฑฐ๋ฆฌ)์ ๊ฐ๋ค๊ณ ๋ณผ ์ ์๋ค.
1norm์ 2norm๊ณต์์์ 2๋์ 1์ ๋ฃ๋ ๋ฐฉ์ ์์ผ๋ก ํํ๋๋ค. ์ด๋ฅผ ์๊ฐ์ ์ผ๋ก ํํํ๋ฉด ์ ์ฌ์ง์์ ๋งจํํผ ๊ฑฐ๋ฆฌ์ ํด๋นํ๋ค.
์๊ทธ๋ฌ๋ฉด ์ด์ ์ผ๋ฐํ๋ฅผ ์ํด ๋ฌดํ-norm์ ๋ณด๋ด๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์ธํผ๋ํฐ ๋์ 2-norm์ 2, 1-norm์ 1๋์ ๋ฌดํ๋๋ฅผ ๋ถ์ฌ๋ณธ๋ค๊ณ ์๊ฐํด๋ณด์. ๊ทนํ ์ฑ์ง์ ์ํด ์ ๋๊ฐ์ด ๊ฐ์ฅ ํฐ ๋์ด์ธ์ ๋๋จธ์ง ๊ฐ(x2, x3..)๋ค์ ๋ชจ๋ ๋ฌด์๋๋ค. ๋ฐ๋ผ์ ์ธํผ๋ํฐ norm์ ๋ฒกํฐ์ ์ฑ๋ถ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ ์ธก์ ํ๋ ๋ฐฉ์์ด๋ค.
์ ๊ทธ๋ฌ๋ฉด ๋ฒกํฐ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ ์ ํ๊ณ p-norm์ด๋ผ๊ณ ํ ๋ p์ ๊ฐ์ ๋ฐ๋ผ ์ด๋ป๊ฒ ๋ฌ๋ผ์ง๋์ง ๊ทธ๋ํ๋ก ํ์ธํด๋ณด์. ๋จผ์ 2-๋
ธ๋ฆ์ ๊ทธ๋ ค๋ณด๋ฉด ์ ๋ฐฉ์ ์์ ์ํญ์ ์ ๊ณฑ์ ํ๊ณ ๋๋ฉด ์์ ๋ฐฉ์ ์๊ณผ ๊ฐ์ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ฆ 2-norm์ ๊ทธ๋ํ๋ก ํํํ๋ฉด ์์ด๋ค.
1norm์ ์ด๋ป๊ฒ ๋ ๊น? ์ ๊ณต์์ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด ๊ทธ๋ฅ ๋์ ์ ์๋ ๊ณต์๊ณผ ๊ฐ๋ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ง์ง๋ง์ผ๋ก ์ธํผ๋ํฐ-norm์ ์ด๋ป๊ฒ ๋ ๊น? ๋ฒกํฐํฌ๊ธฐ๋ฅผ 1์ด๋ผ๊ณ ํ์ ๋ (1, 0), (1, 1/2), (1, 1/3) ๋ฑ๋ฑ ์์๋ฅผ ๋ณด๋ฉด ์ผ๋จ ์ ๋๊ฐ์ด ๊ฐ์ฅ ํฐ 1๋ก ๊ณ ์ ๋๋ ๊ฒ์ ์ ์ ์๋ค. ์ฆ ๋ฒกํฐํฌ๊ธฐ๊ฐ 1์ด๋ฉด ์ด์ฐจํผ x,y์ขํ 1์ ๋์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ 0,0๊ธฐ์ค ๋์๋จ๋ถ์ผ๋ก 1๋งํผ ๊ฑฐ๋ฆฌ๊ฐ ์๋ ์ง์ฌ๊ฐํ์ด ๋ง๋ค์ด์ง์ ํ์ธํ ์ ์๋ค. ์ด๋ฅผ p์๋ฐ๋ฅธ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด ์์๊ฐ์ด ํ์ธํ ์ ์๋ค.
์ด๊ฐ์ norm๊ฐ๋
์ ํตํด ํ์๋ฐฉ์์ ์ผ๋ฐํ ํด์ ์ ์ฉํ๋ฉด ํ์๋ณด๋ค ๋ ์๋งํ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ํด p=2 ๋์ squircle์์๋ p=4๋ฅผ ์ ์ฉํ์์ ํ์ธํ ์ ์๋ค.
Squircle์ ์ํ์ ์ธ ๊ฐ๋ ์ผ๋ก ๋ดค์ ๋ ๋ ๋ฒกํฐ ์ฌ์ด ๊ฑฐ๋ฆฌ(ํฌ๊ธฐ) ๊ณก์ ์ ํ์๋ณด๋ค ๋ ์๋งํ๊ฒ ๊ทธ๋ฆฌ๋ ๊ฒ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค. ๊ทธ๋ ๋ค๋ฉด Squircle๊ณผ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ quadraticBezierTo๋ ๋ฌด์จ ๊ด๊ณ์ผ๊น?
Bezier Curve
quadraticBezier๋ Bezier Curve์ ํ ์ข
๋ฅ์ด๊ธฐ ๋๋ฌธ์ ๋จผ์ ๋ฒ ์ง์์ปค๋ธ๋ถํฐ ์ดํดํด์ผํ๋ค. ๋ฒ ์ง์์ปค๋ธ๋ ํ๋์ค ์์ง๋์ด ๋ฒ ์ง์๊ฐ ๊ณ ์ํ ๋ฐฉ์ ์์ ๋ฐ๋ผ ๊ทธ๋ฆฌ๋ ๊ณก์ ์ด๋ค. ๋น์ฐํ "์ "์ด๊ธฐ ๋๋ฌธ์ ๋ฒ ์ง์ ๊ณก์ ์ ์ ์ํ๋๋ฐ๋ 2๊ฐ์ด์์ ์ ์ด ํ์ํ๊ณ ์ด์ ์ control point๋ผ๊ณ ๋ถ๋ฅธ๋ค. 2๊ฐ์ ์ (point)์ผ๋ก ๋ฒ ์ง์ ๊ณก์ ์ ๊ทธ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ์ ์์ ์์๊ฐ๋ค.
๋ฒ ์ง์์ปค๋ธ๋ ์ ์ด์ ์ ๊ฐฏ์์ ๋ฐ๋ผ ์ข
๋ฅ๊ฐ ๋๋์ด์ง๋ค. ์ ์ด์ ์ ๊ฐฏ์๊ฐ 3๊ฐ๋ฉด quadraticBezier Curve, ์ ์ด์ ์ด 4๊ฐ์ด๋ฉด cubic Bezier curve์ด๋ค.
quadraticBezier Curve ์ ๋ฐฉ์ ์์ ์์๊ฐ์ด point๊ฐ ํ๋ ๋ ๋์ด๋ ์ด์ฐจ๋ฐฉ์ ์์ด๋ค.
๊ธฐ์กด squircle ๋ฐฉ์ ์(์)์์ x, y๋ก ๋งค๊ฐ๋ณ์ํ ํ๋ฉด ์ค๊ฐ๊ณผ ๊ฐ์ ์์ด ๋์ถ๋๋ค. ์ฌ๊ธฐ์ ์ธํ(๊ฐ๋)๋ 90๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ 0๋ถํฐ π/2 ์ฌ์ด ๊ฐ์ ๊ฐ์ง๊ฒ ๋๋ค. ์ด๋ฅผ ํ๋ฒ๋ ๊ทผ์ฌ๊ฐ์ผ๋ก ํ๋ฉด ๋งจ์๋์ ๊ฐ์์์ผ๋ก ์ผ๋ฐํํ ์ ์๋ค. (ํ
์ผ๋ฌ ๊ธ์ ์ฌ์ฉ)
๐ก ํ
์ผ๋ฌ ๊ธ์๋?
https://youtu.be/xE0QTkGmIHo?si=yAh4RAoIEeyjR5oL
๋ฒ ์ง์ ์ปค๋ธ์ 3๊ฐ์ ํฌ์ธํธ๋ฅผ ์์์ ๊ฐ์ด์ก๊ณ ๊ณ์ฐํด๋ณด์
์ด์ ๊ฐ์ด p1์ ํฌ์ธํธ์ ์ ํตํด quadratic ๋ฒ ์ง์ ์ปค๋ธ ๋ฐฉ์ ์์ ๋จ์ํ ์ํฌ ์ ์๋ค.
์ด๋ ๊ฒ ๋จ์ํ๋ฅผ ๊ฑฐ์ณ ๋ฒ ์ง์ ์ปค๋ธ๋ฅผ ํตํด squircle์ ๊ทผ์ฌ๊ฐ์ ์ป์ด๋ผ ์ ์๊ฒ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ quadraticBezier Curve๋ฅผ ์ฌ์ฉํ๋ ๋ ์กฐ์ ์ ์ด ๋ง์ cubic Bezier curve๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ง ์๋๋๋ผ๊ณ ๋ฐ๋ฌธํ ์ ์๋๋ฐ ๋ง๋๋ง์ด๊ธดํ๋ค. ์กฐ์ ์ ์ด ๋ง์ ์๋ก Squircle๋ฐฉ์ ์๊ณผ ๋ ๊ฐ๊น์ด ๊ทผ์ฌ๊ฐ์ ์ป์ ์ ์๊ธฐ๋ํ๋ค. ํ์ง๋ง ์กฐ์ ์ ์ด ๋์ด๋ ์๋ก ์์ฑํด์ผํ ์ฝ๋๊ฐ ๋๋ฌด ๋ณต์กํด์ง๊ณ 3๊ฐ์ ์กฐ์ ์ ๋ง์ผ๋ก๋ ์ถฉ๋ถํ Squircle ๊ณก์ ๊ณผ ์ ์ฌํ๊ฒ ๊ตฌํํ ์ ์๋ค.
๋๋์ด ์ฝ๋๋ฅผ ์ณ๋ณผ ๋๊ฐ ๋์๋ค. ํ๋ฌํฐ์์ quadraticBezierTo ๋ฉ์๋๋ฅผ ํตํด ์ค์ฟผํด์ ํํํ๋ฉด ์์ ๊ฐ๋ค. ์ฌ์ฉ๋ ๋ฉ์๋๋ฅผ ์์๋ณด์๋ฉด
void quadraticBezierTo(double x1, double y1, double x2, double y2)
final path = Path()
..moveTo(50, 50) // ์์์ (P0)
..quadraticBezierTo(100, 100, 150, 50); // ์ ์ด์ (P1), ๋์ (P2)
// ์์์ (50, 50), ์ ์ด์ (100, 100), ๋์ (150, 50)์ ์ฌ์ฉํ 2์ฐจ ๋ฒ ์ง์ด ๊ณก์
quadraticBezierTo ๋ฉ์๋์๋ ํ๋ผ๋ฏธํฐ๊ฐ 4๊ฐ๊ฐ ๋ค์ด๊ฐ๋๋ฐ ์ด๋ ์ ์ด์ , ๋์ ์ x์ขํ์ y์ขํ๊ฐ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค. ์์์ ์ moveTo๋ฉ์๋๋ฅผ ํตํด ๋ฏธ๋ฆฌ ์ ์ํด์ค๋ค. ์ด๋ ์ฌ์ด์ฌ์ด ๊ปด์๋ lineTo๋ฉ์๋๋ ์ค์ ๋ก ๋ผ์ธ์ ๊ทธ๋ ค์ฃผ๋ ๋ฉ์๋์ด๋ค. ์ฆ ์์ฝ๋์์ ๊ฐ moveTo ๊ฐ ์์์ ์ ์ ํด์ฃผ๊ณ lineTo๊ฐ ์ฌ๊ฐํ์ ์ง์ ์ ๊ทธ๋ ค์ฃผ๊ณ ์ง์ ์ด ๋๋๋ ์ง์ ์ ์์์ ์ผ๋ก quadraticBezierTo ๋ฉ์๋๊ฐ ๊ณก์ ๋ชจ์๋ฆฌ๋ฅผ ๊ทธ๋ ค์ค๋ค.
์ด๋ ๋ชจ์๋ฆฌ๋ฅผ ๋ฅ๊ธ๊ฒ ๋ง๋๋ ๋ฐ๊ฒฝ(borderRadius)์ด ์ปจํ
์ด๋์ ๋๋น๋ ๋์ด๋ณด๋ค ํฌ๋ฉด, ๊ณก์ ์ด ์ปจํ
์ด๋ ๋ฐ์ผ๋ก ๋๊ฐ๊ฒ ๋์ด ๊นจ์ง ํ์์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์กฐ์ ์ ์ ์์น๋ฅผ clamp ๋ฉ์๋๋ฅผ ํตํด ์ปจํ
์ด๋์ ๋๋น๋ ๋์ด๋ฅผ ๋์ง ์๋๋ก ์ ํํ๋ค.
์ ์ฝ๋๋ฅผ ํ์ฉํด Squircle ๊ทผ์ฌ๊ฐ์ ๊ทธ๋ ค๋ธ ์ปจํ
์ด๋์ ๊ทธ๋ฅ corner radius๊ฐ๋ง ์ค ์ปจํ
์ด๋์ด๋ค. ์ผ์ชฝ ์ปจํ
์ด๋์ ๋ชจ์๋ฆฌ๊ฐ ํจ์ฌ ๋ ํตํตํ๊ณ ๊ท์ฝ๊ฒ ๊ณก์ ๊ฐ์ด ๋ค์ด๊ฐ์๊ณ ์ค๋ฅธ์ชฝ ์ปจํ
์ด๋๋ ์ฝ๊ฐ ๊ฐ์ ธ์๊ณ ํ์ญํ ๊ณก์ ์ด๋ค. ์ด์ ๊ฐ์ด ํ๋ฌํฐ์์๋ iOS์ฒ๋ผ Squircle ๋์์ธ์ด ์ ์ฉ๋ ๊ท์ฌ์ด ์ปจํ
์ด๋๋ฅผ ๊ทธ๋ฆด ์ ์๋ค.
์ฌ๋ด์ผ๋ก ๊ตฌ๊ธ์ ๊ฒ์ํด๋ณด๋ฉด ์คํ์ค๋ฒํ๋ก์ฐ์์๋ ClipPath๋ฅผ ํตํด ์ค์ฟผํด์ ๊ตฌํํ๋ค๋ ๋ต๋ณ์ด ์์์ง๋ง ์ผ์ cornerRadius ๊ฐ์ด ๋์ด๊ฐ๋ฉด ๊นจ์ง ํ์์ด ๋ฐ์ํ๊ณ ๊ณก์ ๋ iOS์ฒ๋ผ ์์ ๊ณก์ ์ด ์๋ ๊ฐ์ ธ์๋ ๊ณก์ ์ด ๋์์๋ค.
'๐ฆ Flutter' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Freezed ํจํค์ง ์ฌ์ฉ์ด์ ์์๋ณด๊ธฐ (0) | 2024.08.03 |
---|---|
Don't use 'BuildContext's across async gaps ์ด์ (0) | 2024.08.01 |
Shared Preference ํจํค์ง๋ฅผ ์ฐ์ง๋ง์์ผํ๋ ์ด์ (0) | 2024.07.25 |
flutter ๋ค๋น๊ฒ์ด์ ๋ฐ์ ๋ฒํผ์ ๋ฌผ๊ฒฐํจ๊ณผ ์์ ๊ธฐ (feat. inkwell widget) (0) | 2024.07.24 |
Target of URI doesn't exist: 'firebase_options.dart' ์๋ฌ (1) | 2024.07.24 |