Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 리펙터링
- swiftUI
- rxswift
- clean architecture
- uitableview
- Protocol
- 애니메이션
- MVVM
- UICollectionView
- RxCocoa
- swift documentation
- Xcode
- 리펙토링
- combine
- ios
- Refactoring
- 클린 코드
- UITextView
- uiscrollview
- ribs
- Observable
- map
- collectionview
- 스위프트
- HIG
- Human interface guide
- Clean Code
- SWIFT
- tableView
- 리팩토링
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] shadow 그림자 효과 top, left, right, bottom 방향 주는 방법 (layer.shadow) 본문
iOS 응용 (swift)
[iOS - swift] shadow 그림자 효과 top, left, right, bottom 방향 주는 방법 (layer.shadow)
jake-kim 2021. 8. 4. 22:11
layer.shadow 속성 사용
- layer.borderWidth: 정해주지 않으면 그림자 미 표출되기 때문에 주의
- layer.masksToBounds = false: 해당 view의 frame밖에 contents들을 mask처리할 것인지
- layer.shadowColor: 그림자 색상
- layer.shadowOffset: 그림자는 현재 view의 테두리에 겹쳐있는 상태이므로 offset을 통해 이동해야 그림자 표출
- layer.shadowOpacity: 그림자 투명도 (0 ~ 1)
- layer.shadowRadius: 그림자의 corner radius
class ViewController: UIViewController {
lazy var emptyView: UIView = {
let view = UIView()
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(emptyView)
emptyView.snp.makeConstraints { maker in
maker.center.equalToSuperview()
maker.width.height.equalTo(200)
}
/// shadow가 있으려면 layer.borderWidth 값이 필요
emptyView.layer.borderWidth = 1
/// 테두리 밖으로 contents가 있을 때, 마스킹(true)하여 표출안되게 할것인지 마스킹을 off(false)하여 보일것인지 설정
emptyView.layer.masksToBounds = false
/// shadow 색상
emptyView.layer.shadowColor = UIColor.black.cgColor
/// 현재 shadow는 view의 layer 테두리와 동일한 위치로 있는 상태이므로 offset을 통해 그림자를 이동시켜야 표출
emptyView.layer.shadowOffset = CGSize(width: 0, height: 20)
/// shadow의 투명도 (0 ~ 1)
emptyView.layer.shadowOpacity = 0.8
/// shadow의 corner radius
emptyView.layer.shadowRadius = 5.0
}
}
extension으로 4방향 그림자 효과 정의
extension UIView {
enum VerticalLocation {
case bottom
case top
case left
case right
}
func addShadow(location: VerticalLocation, color: UIColor = .black, opacity: Float = 0.8, radius: CGFloat = 5.0) {
switch location {
case .bottom:
addShadow(offset: CGSize(width: 0, height: 10), color: color, opacity: opacity, radius: radius)
case .top:
addShadow(offset: CGSize(width: 0, height: -10), color: color, opacity: opacity, radius: radius)
case .left:
addShadow(offset: CGSize(width: -10, height: 0), color: color, opacity: opacity, radius: radius)
case .right:
addShadow(offset: CGSize(width: 10, height: 0), color: color, opacity: opacity, radius: radius)
}
}
func addShadow(offset: CGSize, color: UIColor = .black, opacity: Float = 0.1, radius: CGFloat = 3.0) {
self.layer.masksToBounds = false
self.layer.shadowColor = color.cgColor
self.layer.shadowOffset = offset
self.layer.shadowOpacity = opacity
self.layer.shadowRadius = radius
}
}
- 위 extension으로 오른쪽으로 그림자 표출
emptyView.layer.borderWidth = 1
emptyView.addShadow(location: .right)
'iOS 응용 (swift)' 카테고리의 다른 글
Comments