๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
iOS/Study

[iOS] Shadow vs ClipsToBound

by Callie_ 2023. 7. 23.

 

๐Ÿ’ป ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ: ์‚ฌ์šฉ์ž๊ฐ€ DatePicker์—์„œ ์„ ํƒํ•œ ๋‚ ์งœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ +100์ผ, +200์ผ, +300์ผ, +400์ผ์ด ํ•ฉ์‚ฐ ๋œ ๋‚ ์งœ๊ฐ€ ์ด๋ฏธ์ง€ ์œ„์— ๋œจ๋„๋ก ๋งŒ๋“ค๊ธฐ.

 

โœ๏ธ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•œ ๊ฐœ๋…: IBOutlet, IBAction, Sub ImageView, Shadow ์™€ ClipsToBound

 

๐Ÿ’ญ ์–ด๋ ค์› ๋˜ ๋ถ€๋ถ„: ์„ค์ •ํ•œ ๊ทธ๋ฆผ์ž๊ฐ€ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์— ๋‚˜์˜ค์ง€ ์•Š์Œ, (์ฒซ) ๋งค๊ฐœ๋ณ€์ˆ˜ ์‘์šฉ, ํ•จ์ˆ˜์‹ ์ •๋ฆฌ

 

 

 

 

๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ํ™”๋ฉด

 

 

 

 

 

๐Ÿ“Œ ์ด๋ฏธ์ง€๋ทฐ ๋’ค๋กœ ๊ทธ๋ฆผ์ž ๋งŒ๋“ค๊ธฐ

 

(1) UIView -> UIImage -> label : ๊ฐ ์†์„ฑ์„ ์‚ด๋ฆฌ๋Š” ๋ ˆ์ด์–ด ์Œ“๊ธฐ

 

 

๊ธฐ์–ตํ•˜์ž ์ด๋ฏธ์ง€ ๋’ค๋กœ ๊ทธ๋ฆผ์ž ๋งŒ๋“ค ๋• ๊ผญ UIView๋ฅผ ์จ์ฃผ๊ธฐ๋กœ.

 

- UIView๋ฅผ ์‹œ์ž‘์œผ๋กœ ์ฐจ๊ณก์ฐจ๊ณก ๋ ˆ์ด์–ด๋ฅผ ์Œ“์•„์ฃผ์–ด์•ผ ํ•œ๋‹ค.

  • UIImageView๋งŒ ์“ฐ๋ฉด layer.cornerRadius ์„ค์ •ํ•  ๋•Œ shadow ์„ค์ •ํ•œ ๋ถ€๋ถ„์ด ํ•จ๊ป˜ ์ž˜๋ ค๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—. (์ •์‚ฌ๊ฐํ˜• ์•ˆ์— ๋™๊ทธ๋ผ๋ฏธ๋ฅผ๊ฝ‰ ์ฐจ๊ฒŒ ๋„ฃ์—ˆ์„ ๋•Œ, ๋™๊ทธ๋ผ๋ฏธ์™€ ๋‹ฟ์ง€ ์•Š์€ ์ •์‚ฌ๊ฐํ˜• ๋ถ€๋ถ„์ด ๋ชจ๋‘ ์ณ๋‚ด์ง„๋‹ค๋Š” ์‹์œผ๋กœ ๊ธฐ์–ตํ•˜๊ธฐ)
  • โ—๏ธ๊ณผ์ œ ๋ฆฌ๋ทฐ๋ฅผ ๋“ค์œผ๋ฉฐ ๋‚ด๊ฐ€ ๋ชฐ๋ž๋˜ ๋ถ€๋ถ„์ด UIView๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ์•ˆ์— UIImageView์™€ label์ด ์†Œ์† ๋˜์–ด์•ผํ•œ๋‹ค๋Š” ๊ฑธ ๋ชฐ๋ผ์„œ ๋ฐฑ๋‚  ๊ทธ๋ฆผ์ž ์„ค์ •์„ ํ•ด๋„ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์— ๋œจ์งˆ ์•Š์•˜์—ˆ๋‹ค. ์ •๋ง ๋ญ˜ ํ•ด๋„ ๋œจ์งˆ ์•Š์•˜์Œ.

 

(2) layer.cornerRadius

 

๊ทธ๋ฆผ์ž ์žˆ ๋ชจ์„œ๋ฆฌ ์žˆ

 

        backgroundImage.layer.cornerRadius = 20
        
        backgroundView.layer.shadowColor = UIColor.black.cgColor
        backgroundView.layer.shadowOffset = CGSize(width: 10, height: 10)
        backgroundView.layer.shadowRadius = 10
        backgroundView.layer.shadowOpacity = 0.5
        
        backgroundView.clipsToBounds = false

 

- shadow ์„ค์ •์€ code snippet(๋‹จ์ถ•ํ‚ค: command + shift + L) ์— ์ €์žฅํ•ด๋‘” ๊ฑธ ๊บผ๋‚ด ์ผ๋‹ค. 

- UIView๋ฅผ ํ™œ์šฉํ•˜์ž ๊ทธ๋ฆผ์ž๊ฐ€ ๋“œ๋””์–ด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์— ๋‚˜ํƒ€๋‚ฌ๋‹ค! ๋Œ€์‹  ๋ชจ์„œ๋ฆฌ๋„ ํ•จ๊ป˜.

 

 

 

๊ฒฐ๊ณผ๋ฌผ

 

        backgroundImage.layer.cornerRadius = 20
        backgroundView.layer.cornerRadius = 20
        
        backgroundView.layer.shadowColor = UIColor.black.cgColor
        backgroundView.layer.shadowOffset = CGSize(width: 10, height: 10)
        backgroundView.layer.shadowRadius = 10
        backgroundView.layer.shadowOpacity = 0.5
        
        backgroundView.clipsToBounds = false

 

- '๋ชจ์„œ๋ฆฌ๊ฐ€ ์™œ ๋‚˜์™”์ง€?'

  • UIView์—๋„ layer.cornerRadius ์ ์šฉํ•ด์•ผํ•˜๋Š” ๊ฑธ ๋ชฐ๋ž๊ธฐ ๋•Œ๋ฌธ์—. + shadow ์„ค์ •์„ UIView๊ฐ€ ์•„๋‹ˆ๋ผ UIImageView์—๋‹ค๊ฐ€ ํ•ด๋†“์•„์„œ.
  • ๋ฐ”๋กœ IBOutlet์— UIView๋ฅผ ๋งŒ๋“ค๊ณ  ์‹์— ์ถ”๊ฐ€ํ•˜๊ณ  shadow ์„ค์ •์„ UIView๋กœ ๋ฐ”๊พธ๋‹ˆ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฌผ์ด ๋‚˜์™”๋‹ค.

 

 

(3) clipsToBounds

 

-UIview = Super View , UIImageView = Sub View

- clipsToBounds = true ๋กœ ํ•˜๋ฉด ๊ทธ๋ฆผ์ž๊ฐ€ ๋‹ค์‹œ ์‚ฌ๋ผ์ ธ์žˆ๋Š”๋ฐ, ์ด๋Š” UIview์— ์„ค์ •ํ•œ ๊ทธ๋ฆผ์ž ์˜์—ญ์„ ์ณ๋‚ด๋ฒ„๋ฆฌ๊ฒ ๋‹ค!์™€ ๊ฐ™์€ ์˜๋ฏธ๋ผ์„œ false๋กœ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ํ•จ์ˆ˜ ์‹ ๋ง๊ณ ๋„ ์ธ์ŠคํŽ™ํ„ฐ ์˜์—ญ์—์„œ๋„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

โ—๏ธ๋‚˜์ค‘์— ์ˆ˜์ •(๊ฐœ์„ )ํ•ด์•ผํ•˜๋Š” ๋ถ€๋ถ„

 

 

: ์•„์ง ํ•จ์ˆ˜๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์‘์šฉํ•ด์„œ ์“ฐ์ง€ ๋ชป ํ•ด์„œ ๋งŽ์€ ๋ถ€๋ถ„์ด ์ค‘๋ณต ๋˜๋Š” ์‹์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ •๋ฆฌํ•˜์ง€ ๋ชป ํ•˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ.

: ์•„๋ž˜ ์‹์ด ๋ฌธ์ œ์˜ ๋ถ€๋ถ„. Calendar.current.date(byAdding: .day, value:100, to:sender.date) & dateCaountBox100.text ๋ถ€๋ถ„์„ ํ•จ์ˆ˜์‹์œผ๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋ฉด ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ•˜๋‚˜์˜ ์‹์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์ข€..๋”... ์ต์ˆ™ํ•ด์ง€๋ฉด... ์ˆ˜์ •ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

 

 @IBAction func datePickerValueChanged(_ sender: UIDatePicker) {
        
        print("์•ก์…˜ ์ž˜ ๋จ")
        
        // 100
        
        let result = Calendar.current.date(byAdding: .day, value: 100, to: sender.date)
        
        let format = DateFormatter ()
        format.dateFormat = "yyyy๋…„ MM์›” dd์ผ"
        
        let value = format.string(from: result!)
        
        dateCountBox100.text = value
        
        
    }

 

 

 

 

 

'iOS > Study' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[iOS] Keychain vs UserDefaults  (0) 2023.12.17
[Study/iOS] Method Dispatch  (0) 2023.12.02
[iOS] ์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ  (0) 2023.11.27
[Study/iOS] unowned vs weak  (2) 2023.11.14
[Swift] Enum with Reusable VC  (0) 2023.10.10