안녕하세요...!
이번에도 글을 쓰고 있는 임정현입니다...
저희 버튼에는 그림자가 들어가는데 말입니다...
이 그림자를 뷰한테 줬다가 뺐어야하는데, 주는 거는 됐는데, 뺐을 때 문제가 생겼습니다...
그래서 CALayer[카-레이어]를 쓸 때 저랑 같은 문제를 겪는다면 이 방법을 한번... 츄라이..!
문제 상황
그림자를 넣는데 CALayer때문에 에러가 계속 났다. 아니, 처음에는 CALayer에러인줄도 몰랐다. 아래 처럼 이상하게 에러가 발생했기 때문이다.

문제 해결
그래서 왜 발생하지.. 하면서 이것저것 ViewModel이 문젠가.... 컴바인이 문젠가... 하..... 왜지 하다가 CALayer를 딱 지우니까 오류가 안나서 여기서 뭔가 있다는 것을 느꼈다. (문제 발생 5시간만에)
그래서 removeFromSuperlayer 에서 발생한 것을 알았다.
레이어를 하나만 들고 그것을 계속 재활용하는 방식으로 개선하여 해결했다.
view.layer.sublayers?.last?.removeFromSuperlayer()
// 대충 이렇게 되어있던 코드를
myShadowLayer.removeFromSuperlayer()
// 이런식으로 바꿔주었다.
뭔가 마지막에 추가했다고 그것이 내가 추가한 layer임을 확신할 수 없다는 것을 깨달은 순간이었다.
추후 들어보니 shadowLayer클래스를 서브타입으로 만들고 sublayers를 돌면서 해당 서브타입인지 확인한다... 도 있는데 굳이? 라는 생각에 그냥 sublayer를 들고있기로 했다.
배운 점
CALayer를 조작할때 뷰에서 조작하지 말자…
CALayer에게 뷰에서 내려오라고 조작하자.
참조 링크
'UIKit' 카테고리의 다른 글
무지성 MainActor를 붙인 상황에서 데이터가 로드되기 전에 뷰가 그려지는 문제 해결 (0) | 2024.12.02 |
---|---|
뷰 그리는 방식에 대한 논의(Factory vs MH커스텀 vs VC에서 설정) (0) | 2024.12.02 |
CollectionViewCell들 간의 Drag & Drop 구현하기 (1) | 2024.12.01 |
런타임 시점에 Constraint를 조절하여 애니메이션 구현하기 (1) | 2024.11.19 |
iOS 15.0 이상에서 UIButton 안에 있는 이미지 사이즈 조절하기 (1) | 2024.11.18 |