화면을 구성하다보면 view안에 컴포넌트들을 배치하는 경우가 있죠!
그럴 때 만약 아래 그림과 같이 배치했다고 했을 때 view와 imageView를 모두 다듬 고 싶을 때 어떻게 해야할까요??
약간의 제약조건과 이미지를 asset에서 하나 가져와 설정해주고 실행해보면
이런 모습입니다.
여기서 제가 이미지의 모서리를 둥글게 하고싶다! 하면?
*참고*
cardView : 갈색 부분에 해당하는 뷰
posterImageVIew : 사진이 출력되고 있는 이미지뷰
configure() : ui관련 설정 코드들을 묶어 함수로 분리한 것
아래에 나오는 코드들은 모두 configure() 함수 내에 작성한 부분들입니다.
****
위의 configure() 안의 코드 처럼
imageView의 cornerRadius 값을 지정해주면 됩니다.
지정해주고 나면
위와 같이 imageView의 모서리가 다듬어지는데
잘 안보이실 것 같아서 확대해보면!
여기 posterImageView가 다듬어저 둥글어졌고,
그 뒤의 갈색 cardView가 빼꼼 보이는 모습을 확인하실 수 있습니다!
하지만 저희의 목적은
"cardView도 둥글게 하는 것"
이었기 때문에
우선
cardView에도 cornerRadius값을 줘봅시다!
그러면
func configure() {
posterImageView.layer.cornerRadius = CGFloat(8)
cardView.layer.cornerRadius = CGFloat(8) // 추가!
}
위와 같이 cardView의 cornerRadius값을 주는 코드를 추가해주고 실행해보면~
짠!
이미지와 배경 모두 둥글게 잘 깎인 모습을 볼 수 있죠?
[ Q ]
그런데 잠깐.
func configure() {
cardView.layer.cornerRadius = CGFloat(8)
}
여기서 만약 posterImageView의 cornerRadius 값을 주는 코드를 주석 처리하고
cardView관련 코드만 남기고 실행한다면 어떻게 될까요??
정답은
아래 그림과 같이 됩니다.
보면
cardView는 4개의 모서리 다 잘 깎였습니다.
하지만 그 위에 posterImageView가 얹어져있기 때문에
우리가 posterImageView의 radius 설정을 해주지 않아서
모서리가 그대로 남아있는 것을 볼 수 있습니다.
.
.
.
.
.
이럴때 우리가 사용해야하는 프라퍼티가 바로 !
" clipsToBounds "
입니다!
clipsToBounds
오늘도 어김없이 나오는 공식문서...
자 공식문서를 보면
Bool값인데, subView들이 view의 bounds(경계, 테두리)를 따를 것인지(viewd의 경계를 따라 다듬어줄 것인지) 정해주는 값입니다.
cardView에 clipsToBounds값을 true로 주면
func configure() {
cardView.layer.cornerRadius = CGFloat(8)
cardView.clipsToBounds = true // 추가!
}
아래와 같이
cardView의 곡률에 따라 posterImageView도 같이 다듬어지게 됩니다 ㅎㅎ
[ Q ]
왜 굳이 각자 cornerRadius값을 설정하지 않고 clipsToBounds를 쓰죠?
그 이유는
만약 imageView와 view의 모서리를 다른 값을 주어 각자 다른 곡률을 주고 싶다면
처음에 작성했던대로
각각의 cornerRadius값을 주는 형태로 지정해주면 됩니다.
하지만 위와 같이
view안에 imageView가 속해있고
두개를 같은 곡률로 다듬어주고 싶다!
그런데 두개를 각각 conerRadiusr값을 지정해줬다면
매번 두개의 값을 변경해주어야 할 것입니다.
(혹은 변수에 값을 지정해두고, 두 프라퍼티에 같은 값을 대입해줄 수도 있겠지만)
cardView.clipsToBounds를 true로 주고
cardView의 conerRadius 값만 조정해주면
cardView, posterImageView 둘이 같은 값으로 같이 조정 되겠죠??
clipsToBounds를 검색하시면 같이 보이는 개념이
maskToBounds입니다.
(뭐하는 앤지 궁금하죠? ...궁금하시죠..? 궁금하다고 해주세요...)
간단하게 공식 문서 캡쳐본을 남기고
다음 포스팅에서
테스트 코드/화면과 함께 돌아오겠습니다 :)
+ maskToBounds
틀린부분이 있거나, 더 좋은 방법이 있다면 댓글로 남겨주세요!
🌈댓글은 언제나 환영입니다🙏🏻
참고자료
'Trouble Shooting' 카테고리의 다른 글
CollectionView cell 커스텀 하기 (해 달라는 대로 다 해줬잖아...) - iOS (1) | 2021.11.24 |
---|---|
[masksToBounds] view 위에 있는 레이블이 view의 너비에 맞게 잘리나요? 안잘리게 하고싶다면? - iOS (0) | 2021.10.23 |
[cornerRadius] - 동그란 버튼을 만들고 싶을 때 (2) | 2021.10.18 |
[AutoLayout] StackView에서 내가 원하는 컴포넌트를 크게 하고 싶을 때 - iOS (0) | 2021.10.13 |
collectionView - cell의 imageView를 원으로 만드는데 찌그러짐 - iOS (0) | 2021.09.30 |