본문 바로가기
iOS/UIKit

[UIKit] 모서리 깎기와 그림자 설정을 동시에 하기

by Dev.Andy 2023. 7. 20.

머리말

문제점

  • 그림자 처리를 하려고 하면(.layer.shadow~) 그림자만 남고, 모서리를 깎으려 하면(.layer.cornerRadius) 모서리만 깎여지는 문제가 발생했다.
  • 하나의 ImageView에 두 설정을 하려면 양립 불가능하다는 피드백을 받았다.

완성 화면

문제를 해결한 View, 모서리도 깎여져 있고 그림자도 반영이 된 상태이다

 

해결책

  • 네 개의 View 안에 각각의 ImageView를 넣었다.
  • 여기에 ImageView를 실제로 화면의 모서리를 깎고, 그 상위의 View에 그림자를 넣는 방식으로 문제를 해결했다.

ViewController의 계층 구조

ViewController의 계층 구조

코드


  
import UIKit
class DatePickerViewController: UIViewController {
...
@IBOutlet var topLeftView: UIView!
@IBOutlet var topRightView: UIView!
@IBOutlet var bottomLeftView: UIView!
@IBOutlet var bottomRightView: UIView!
@IBOutlet var topLeftImageView: UIImageView!
@IBOutlet var topRightImageView: UIImageView!
@IBOutlet var bottomLeftImageView: UIImageView!
@IBOutlet var bottomRightImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
designView()
}
func designView() {
designImageView(view: topLeftView, image: topLeftImageView)
designImageView(view: topRightView, image: topRightImageView)
designImageView(view: bottomLeftView, image: bottomLeftImageView)
designImageView(view: bottomRightView, image: bottomRightImageView)
}
// view는 그림자 설정만 하고, 모서리는 실제 image의 것만 조절
func designImageView(view: UIView, image: UIImageView) {
image.layer.cornerRadius = 30
view.layer.shadowColor = UIColor.black.cgColor
view.layer.shadowOffset = CGSize(width: 10, height: 10)
view.layer.shadowRadius = 5
view.layer.shadowOpacity = 0.3
view.clipsToBounds = false
}
...
}

 

댓글