Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

potato's iOS Story/๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๋งŒ๋‚œ ์นœ๊ตฌ๋“ค

[UIKit] UILabel์— corenrRadius๋ฅผ ์ ์šฉํ•  ๋•Œ ์ˆ˜ํ•™๊ณ„์‚ฐ์„ ํ•ด์ค˜์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ๊ณ„์…จ์Šต๋‹ˆ๊นŒ!๐Ÿค” (clipToboudns, masksToBounds์ฐจ์ด์ )

๊ฐ์ž ๐Ÿฅ” 2022. 11. 4. 02:37
๋ฐ˜์‘ํ˜•

์šฐ์„  Radius๊ฐ€ ๋จนํžˆ์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ๊ทธ๊ฒƒ ๋ถ€ํ„ฐ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ–ˆ๋‹ค.

CornerRadius๊ฐ€ ์•ˆ๋จนํž๋•Œ ์ด ๋ฐฉ๋ฒ•์„ ์จ๋ณด์ž.

๐Ÿคฏ ๋‚˜๋Š” ์ง€๊ตผ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ชจ์–‘์˜ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ์ค‘

let newsCategoryLabel: UILabel = {
        let newsCategoryLabel = UILabel()
        newsCategoryLabel.textAlignment = .center
        newsCategoryLabel.font = .font(.bold, ofSize: 12)
        newsCategoryLabel.layer.cornerRadius = 20
        newsCategoryLabel.backgroundColor = .white
        // TODO: - ์นดํ…Œ๊ณ ๋ฆฌ์— ์ ์ ˆํ•œ ์ƒ‰์ƒ์„ ๋„ฃ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
        newsCategoryLabel.textColor = .evyBlack1
        return newsCategoryLabel
    }()

์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ, ๋ถ„๋ช…ํžˆ ๋‚˜๋Š” radius๋ฅผ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ ์•„๋ž˜์ฒ˜๋Ÿผ cornerRadius๊ฐ€ ์ ์šฉ์ด ์•ˆ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ตฌ๊ธ€๋ง ํ•˜๋‹ค๊ฐ€ ๋ฐœ๊ฒฌํ•œ ๊ฒƒ, ์•„๋ž˜์˜ ์ฝ”๋“œ๊ฐ€ ์„ ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค.

label.clipToBounds = true

๊ทผ๋ฐ, ์ด๊ฑด ๋จธ์ง€?merge?

label.layer.masksToBounds = true

 

๐Ÿ™Œ๐Ÿป ๋‘๊ฐœ ๋‹ค ์ ์šฉํ•˜๋ฉด radius๊ฐ€ ์งค๋ฆฌ๊ฒŒ ๋œ๋‹ค. ๋„๋Œ€์ฒด ๋ฌด์Šจ ์ฐจ์ด๊ฐ€ ์žˆ๊ณ  ์–ธ์ œ ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ• ๊นŒ?

 

1๏ธโƒฃ clipTobounds

UIView ์†Œ์†์˜ ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ์ด์ด๋‹ค.

๐ŸŽ Subview๊ฐ€ ๋‚ด view๋ฅผ ๋„˜์–ด์„  ๊ฒฝ์šฐ, ๋‚ด ๋ทฐ๋ฅผ ๋„ˆ๋จธ๋กœ ๊ทธ๋ฆด ๊ฒƒ์ธ์ง€ ๋ง๊ฒƒ์ธ์ง€๋ฅผ ์„ค์ •ํ•˜๋Š” ์ธ์Šคํ„ด์Šค์ด๋‹ค. default๋Š” false์ด๋‹ค.

https://developer.apple.com/documentation/uikit/uiview/1622415-clipstobounds

 

Apple Developer Documentation

 

developer.apple.com

์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ด๋ƒ ํ•˜๋ฉด, SuperView ์•ˆ์— SubVIew๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. 
์ด๋•Œ Subview์˜ boudns๋ฅผ superView์™ธ๋ถ€๋กœ ์˜ฎ๊ฒจ๋ฒ„๋ฆฌ๋ฉด, subView๋Š” ์œ„์น˜๊ฐ€ ์–ด๊ธ‹๋‚˜์„œ ๊ทธ๋ ค์ง€๊ฒŸ์ง€?? 
๊ทผ๋ฐ ์ด๋•Œ ๋งŒ์•ฝ clipToBounds๊ฐ€ true์ด๋ฉด, subview๋Š” superview๋‚ด๋ถ€์—์„œ๋งŒ ๊ทธ๋ ค์ง. ๊ทธ ํ”ผ๊ทธ๋งˆ์—์„œ clip ํ•˜๋ฉด ๋‚ด๊ฐ€ ์ง€์ •ํ•œ ๋‚ด๋ถ€์—์„œ๋งŒ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋Š”๊ฒƒ์ฒ˜๋Ÿผ!!

2๏ธโƒฃ  masksToBounds

clipsToBounds๋ž‘ ๋˜‘๊ฐ™๋‹ค๊ณ  ํ•œ๋‹ค. (๊ธฐ๋Šฅ์€!)
๊ทผ๋ฐ ๋‹ค๋ฅธ์ ์€, masksToBounds์ฝ”๋“œ๋ฅผ ๋œฏ์–ด๋ณด๋ฉด, ์ด๊ฒƒ์€ CALayer ํ”„๋กœํผํ‹ฐ๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์žก์„๋•Œ

label.layer.masksToBounds = true

์ด๋ ‡๊ฒŒ .layer๋กœ ํ˜ธ์ถœํ•ด์•ผํ•จ. ํ˜ธํ˜ธํ˜ธ ์ด๋Ÿฐ์ด์œ ๊ฐ€ ์žˆ์—ˆ๊ตฐ!

๐ŸŽ ์ •์˜๋ฅผ ํ•ด๋ณด๋ฉด, subLayer๊ฐ€ ๋‚ด layer๋ฅผ ๋„˜์–ด๊ฐ„ ๊ฒฝ์šฐ, ๋‚ด layer ๋„ˆ๋จธ๋กœ ๊ทธ๋ฆด๊ฒƒ์ธ์ง€ ์•„๋‹Œ์ง€ ํ•œ๊ณ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ

https://developer.apple.com/documentation/quartzcore/calayer/1410896-maskstobounds

 

Apple Developer Documentation

 

developer.apple.com

 

๐Ÿ˜ƒ๐Ÿ™Œ๐Ÿป ์•„ํ•˜!! ๐Ÿ’ก๐Ÿง

cornerRadius๋˜ํ•œ ๋ ˆ์ด์–ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ชจ์„œ๋ฆฌ๋ฅผ ์ž˜๋ฆฌ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‘˜์ค‘ ์–ด๋Š ํ•˜๋‚˜๋ผ๋„ ํ•ด์ค˜์•ผ๋˜๋Š”๊ตฌ๋‚˜! ๋ฅผ ๊นจ๋‹ฌ์„ ์ˆ˜ ์žˆ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ: https://dongkyprogramming.tistory.com/15

 


๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ์„ ํ•˜๋˜ ์ค‘ ๋ฐœ๊ฒฌํ•œ ์‚ฌ์‹ค์ด ์žˆ๋‹ค.
์—ฌํƒœ๊ป ๋””์ž์ธ์— ๊ทธ๋ ‡๊ฒŒ ํฌ๊ฒŒ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ์„ ํ–ˆ์–ด์„œ ํ”ผ๊ทธ๋งˆ์— ๋‹ด๊ธด ๋‚ด์šฉ์„ ๋Œ€์ถฉ ๋ˆˆ๋Œ€์ค‘์œผ๋กœ ๋‹ด์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๋””์ž์ด๋„ˆ์™€ ์ œ๋Œ€๋กœํ•˜๋Š” ํ˜‘์—…์€ ์ฒ˜์Œ์ด๋ผ ์•„์ฃผ์„ธ์„ธํ•˜๊ฒŒ ๊ธฐ๋กํ•˜๋ฉด์„œ ํ•ด์•ผํ–ˆ๋‹ค.

๊ทธ์ค‘์— ๊ณ ๋ฏผ์Šค๋Ÿฌ์› ๋˜ ๊ฒƒ์ด CorenrRadius์˜€๋‹ค. ์™œ๋ƒ๋ฉด,, ํ”ผ๊ทธ๋งˆ์—์„œ ์ค€ ๊ฐ’์ด๋ž‘ ์ฝ”๋“œ๋กœ ์ค€ ๊ฐ’์€ ๊ฐ™์€๋ฐ ๋ชจ์–‘์ด ๋‹ค๋ฅธ๊ฒƒ์ด๋‹ค!! ๋„๋Œ€์ฒด ๋ญ๊ฐ€ ๋ฌธ์ œ์ผ๊นŒ?ใ…œใ…œใ…œใ…œใ…œ ์—‰์—‰

 

์–ด์จ‹๋“  ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•ด์„œ cornerRadius๋ฅผ ์ ์šฉํ•œ ๊ฒฐ๊ณผ, ์•„๋ž˜์™€ ๊ฐ™์ด ์ถœ๋ ฅ๋๋‹ค.

๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ชจ์Šต๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ, ์•ฝ๊ฐ„ ๋Ÿญ๋น„๊ณต ๋ชจ์–‘์ฒ˜๋Ÿผ ์š”์ƒํ•˜๊ฒŒ ์ƒ๊ฒผ๋‹ค. ์™œ,,, ๋„๋Œ€์ฒด ์™œ,,,! ๋‚œ ํ”ผ๊ทธ๋งˆ์—์„œ ๋””์ž์ด๋„ˆ๊ฐ€ ์ค€ ๊ฐ’์ด๋ž‘ ๋™์ผํ•˜๊ฒŒ ์ค€๊ฑด๋ฐ!!

CornerRaidus๊ฐ€ ์ƒ๊ธฐ๋Š” ์›๋ฆฌ๋ฅผ ์•Œ์•„์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค!

๊ฒฐ๋ก ์€ ์ฐพ์ง€ ๋ชปํ–ˆ๊ณ , radius๊ฐ€ 20์ด ๊ณผํ•œ๊ฑฐ๊ฐ™์€๋ฐ ใ… ใ…  ๋ฐฉ๋ฒ•์ด ์—†๋‚˜..๋ผ๋Š” ์ƒ๊ฐ ๋ฟ์ด์—ˆ๋‹ค. ๋ถ„๋ช… ํ”ผ๊ทธ๋งˆ์—์„œ๋Š” 20์„ ์ฃผ์–ด์„œ, ๋‚˜๋„ ์ฝ”๋“œ์—์„œ 20์„ ์ค€๊ฑด๋ฐ ๋„ˆ๋ฌด ๊ณผํ•˜๊ฒŒ ์ž˜๋ฆฌ๋Š” ๊ฒƒ๊ฐ™์•„์„œ ์ž„์˜๋กœ ์กฐ์ ˆํ•ด์ค„์ˆ˜๋„ ์—†๊ณ  ์ด๊ฑฐ์ด๊ฑฐ,,, ์ด์ƒํ•˜๋„ค …

์œ„: ์ฝ”๋“œ / ์•„๋ž˜: ํ”ผ๊ทธ๋งˆ ํ™”๋ฉด

ํ”ผ๊ทธ๋งˆ์—์„œ๋Š” ์œ„ ์‚ฌ์ง„์—์„œ ์˜ค๋ฅธ์ชฝ ๋ฐ‘์—์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ์ฝ”๋“œ๋กœ ๋ณ€ํ˜•ํ•œ ๋ชจ์Šต์„ ๋ณด์—ฌ์ฃผ๋Š”๋ฐ, ์ €๊ธฐ์„œ๋„ cornerRadius๊ฐ€ 26.5๋กœ ์ž˜ ๋„ฃ์–ด์ ธ์žˆ๋‹ค. ๊ทผ๋ฐ ์ด๊ฑธ ์ถœ๋ ฅํ•˜๋ฉด ์–ด์ผ€๋˜๋ƒ๋ฉด!!



ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ์š”๋กท๊ฒŒ ์š”์ƒํ•˜๊ณ  ๊ดด์ƒํ•œ ์†Œ์„ธ์ง€๐ŸŒญ๋ชจ์–‘์ด ๋œ๋‹ค.

์ด๋ฆฌ์ €๋ฆฌ ์ฝ”๋“œ๋ฅผ ๋ฐ”๊ฟ”๋ณด๋ฉด์„œ ๋„๋Œ€์ฒด๊ฐ€ ๋ญ๊ฐ€ ์ž˜๋ชป๋œ ๊ฒƒ์ธ์ง€ ์ฐพ์•„๋ณด์•˜๋‹ค.

 

1๏ธโƒฃ 1์ฐจ ์ถ”์ธก

๋ฒ„ํŠผ์— width, height ์‚ฌ์ด์ฆˆ๋ฅผ ์ฃผ๊ณ  radius = 35 ์ ์šฉ

override init(frame: CGRect) {
        super.init(frame: .init(origin: .zero, size: .init(width: 205, height: 50)))
        self.configureUI()
    }

→ ๊ทผ๋ฐ ์ด๋ ‡๊ฒŒ ์ง์ ‘์ ์œผ๋กœ ์‚ฌ์ด์ฆˆ๋ฅผ ์กฐ์ ˆํ•ด์ฃผ๊ณ , radius ๋ฅผ ์ฃผ๋ฉด, ํ”ผ๊ทธ๋งˆ๋ž‘ ๋‹ค๋ฆ„. ํ”ผ๊ทธ๋งˆ์—์„œ๋Š” 26.5์คฌ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ๋Š” 35์ •๋„ ์ค˜์•ผ ์›ํ•˜๋Š” ๋ฐ˜์› ๋ชจ์–‘์œผ๋กœ ๋‚˜์˜ด… ๋ฌด์Šจ์›๋ฆฌ์ง€,, ์ฝ”๋„ˆ๊ฐ€ ์ž˜๋ฆฌ๋Š” ์›๋ฆฌ๊ฐ€..?

๋ฒ„ํŠผ์— ์‚ฌ์ด์ฆˆ๋ฅผ ์ง์ ‘์ ์œผ๋กœ ์ฃผ์ง€ ์•Š๊ณ , autolayout์œผ๋กœ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•œ ๊ฒฝ์šฐ ๋‹ค์‹œ ๋พฐ์กฑ์ด๋กœ comback

gotoButton.constraint(.widthAnchor, constant: 205)
gotoButton.constraint(.heightAnchor, constant: 50)
// ์ด๋ ‡๊ฒŒ ์˜คํ† ๋ ˆ์ด์•„์›ƒ ์ฃผ๋Š”๊ณณ์—๋‹ค๊ฐ€ ์ฃผ๊ณ   ๋นŒ๋“œํ•ด๋ณด๋ฉด?
// ์œ„์— ์‚ฌ์ด์ฆˆ๋Š” ์ง€์›€ (์•ˆ์ง€์›Œ๋„ ๊ทผ๋ฐ ๋ทฐ๋Š” ๋™์ผํ•˜๊ฒŒ ๋‚˜์˜ค๋„ค?)

 

๋ญ,, ์›์ธ์€ ๋„๋Œ€์ฒด๊ฐ€ ๋ญ๊ฐ€ ์ž˜๋ชป๋œ๊ฒƒ์€ ๋ชจ๋ฅธ์ฑ„๋กœ, ์ด๋ฆฌ์ €๋ฆฌ ๋ฐ”๊ฟ”๋ณด๋‹ค๊ฐ€ ์•„๋ž˜ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•ด๋ƒˆ๋‹ค.

ํ—, ์ด๊ฑฐ width ๋ž‘ height์ฃผ๋Š ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‹ค๋ฅธ๊ฑฐ๊ฐ™์•„.

 

2๏ธโƒฃ ๋ฏธ์นœ!! cornerRadius๊ฐ€ ์ผ์ •ํ•œ ๋น„์œจ๋กœ ์ž˜๋ฆฌ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ๊ฐ€์ง„ width์™€ height์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค๊ณ ?!?!?!?

 

๐Ÿค” cornerRadius๋ž€

https://developer.apple.com/documentation/quartzcore/calayer/1410818-cornerradius

 

Apple Developer Documentation

 

developer.apple.com

layer์˜ ๋ฐฐ๊ฒฝ์— ์‚ฌ์šฉํ•˜๋Š” ๋‘ฅ๊ทผ ๋ชจ์„œ๋ฆฌ๋ฅผ ๊ทธ๋ฆฌ๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ˜์ง€๋ฆ„์„ ์˜๋ฏธํ•œ๋‹ค. CGFloat๊ฐ’์„ ํฌ๊ฒŒ ์ค„ ์ˆ˜๋ก ๋” ๊ตด์ ˆ๋ฅ ์ด ํฌ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด์„œ ๋ณด์ž.

์ด๋ ‡๊ฒŒ 100์งœ๋ฆฌ ์ •์‚ฌ๊ฐํ˜•์—, cornerRadius = 10์„ ์ฃผ๋ฉด ์™ผ์ชฝ์œ„๊ฐ€ ๊นŽ์ด๋Š”๊ฒƒ์ฒ˜๋Ÿผ ์ €๋ ‡๊ฒŒ ๊นŽ์ธ๋‹ค.

width์™€ height๊ฐ€ 50์ด๋ผ๊ณ  ์น˜๋ฉด, ๋‚ด๊ฐ€ ๊ฐ€์žฅ ๋™๊ทธ๋ž€ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค๊ณ ์žํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด, ๊ทธ๋ฆผ์ฒ˜๋Ÿผ 4๊ฐœ์˜ ๊ตฌ์—ญ์œผ๋กœ ๋‚˜๋ˆ ์„œ ๋ชจ์„œ๋ฆฌ๋ฅผ ์ด ๋„ค๋ฒˆ ๊นŽ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ฐ˜์ง€๋ฆ„ 25์งœ๋ฆฌ ๋กœ ๋„ค๋ฒˆ์„ ์งค๋ผ์„œ ์™„์ „ ๋™๊ทธ๋ž€ ๋ชจ์–‘์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. cornerRadius = 25์ธ ์ƒํƒœ์ด๋‹ค.

๊ทธ๋Ÿผ ์ด์ œ ์—ฌ๊ธฐ์„œ, cornerRadius๊ฐ€ 40์ด ๋˜๋ฒ„๋ฆฌ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

๊ฒฐ๊ตญ ์ด๋ ‡๊ฒŒ ํฐ ์›์ด ์ž‘์€ ์‚ฌ๊ฐํ˜•์„ ๋„ค ๋ชจ์„œ๋ฆฌ๋ฅผ ์ž˜๋ผ๊ฐ€๊ธฐ๋•Œ๋ฌธ์—, ์š”์ƒํ•œ ๊ตฐ๊ณ ๊ตฌ๋งˆ ๋ชจ์–‘๐Ÿ ์ด ๋‚˜์˜ฌ ๊ฒƒ์ž„. ์•„ํ•˜!!!! ๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ์ €๋ ‡๊ฒŒ ์š”์ƒํ•˜๊ณ  ๋พฐ์กฑํ•œ ๊ตฐ๊ณ ๊ตฌ๋งˆ๊ฐ€ ๋‚˜์™”๊ตฌ๋‚˜!!!!!

๋ฒ„ํŠผ์˜ width๋‚˜ height๋ฅผ ๊ณ ๋ คํ•ด์„œ radius๋ฅผ ์ฃผ์–ด์•ผํ•œ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.!! ์ด๋ฅผ ๊นจ๋‹ซ๊ฒŒ ํ•ด์ฃผ์‹ ,, ๊ฐ“๋“€์˜ … ์ฝ”๋“œ๋ฆฌ๋ทฐ

 

 

์ด๋ ‡๊ฒŒ ๋ฌด์‚ฌํžˆ ๋‚˜๋Š” corenrRadius์— ๋Œ€ํ•œ ์ดํ•ด๋ž„ ๋ฏธ์ฐจ๊ณ  ์ž˜ ์ ์šฉํ•ด์„œ ์นญ์ฐฌ์„ ๋ฐ›์•˜๋‹ค๋Š” ํ›„๋ฌธ์ด๋‹ค~!~! โค๏ธ

 

 

๊ทธ๋™์•ˆ ์ฝ”๋“œ๋งŒ ์ฃผ๊ตฌ์žฅ์ฐฝ ์ณค์—ˆ๋Š”๋ฐ,, ์ด์ œ ์›๋ฆฌ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๊นจ์šฐ์ณ๊ฐ€๋‹ˆ๊นŒ ์žฌ๋ฏธ๋‚˜๋‹ค... ์”,,, ํ•˜... ๐Ÿฅน

๋ฐ˜์‘ํ˜•