layer autolayout 질문

3 답변 글타래를 보이고 있습니다
  • 글쓴이
    • 석수
      참가자
      • 글작성 : 6
      • 답글작성 : 2

      안녕하세요~

      코드로 그라데이션 배경, 라운드 처리, 쉐도우효과 등을 주다보니 view에 layer를 추가로  넣으면서 구현을 했습니다 

      문제가 uiview의 root layer가 아니면 autolayout이 안먹는거 같은데요ㅜ

      추가한 layout에도 크기 변화를 주기 위해서 좋은 방법 있으신지 여쭤보려고합니다~ 

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 580

      view의 layer는 CALayer라는 코어 애니메이션 레이어 클래스입니다.
      코어 애니메이션 레이어는 오토레이아웃이 적용되지 않습니다. 오토 레이아웃은 UIKit의 UIView에 적용되지요.
      layer의 변경은 CABasicAnimation 등의 클래스를 알아보면 될 것 같아요.

    • 🐛
      참가자
      • 글작성 : 2
      • 답글작성 : 6

      먼저 UIViewCALayer를 하나 소유하고 거기에 터치 핸들링이 기능이 추가되어 있는 뷰라고 생각하시고, UIView는 소유하고 있는 CALayerdelegate로 설정되어있습니다.

      오토레이아웃 엔진에 의해 UIViewlayoutSubviews() 메소드에서 레이아웃 제약조건을 사용해 하위 뷰들의 크기가 계산되고 UIView의 layer의 크기가 변경되면서 CALayerDelegatelayoutSublayers(of:) 메소드가 호출됩니다.

      따라서 layoutSublayers(of:) delegate 메소드를 추가한다음 전달받은 layer(= 일반적으로 UIView의 레이어)의 frame값을 가지고 하위 layer들의 레이아웃을 직접 계산해서 하위 layer의 frame을 업데이트 해주시면 됩니다.

       

      • 이 답변은 🐛에 의해 3 years, 11 months 전에 수정됐습니다.
      • 이 답변은 🐛에 의해 3 years, 11 months 전에 수정됐습니다.
      • 이 답변은 🐛에 의해 3 years, 11 months 전에 수정됐습니다.
    • 석수
      참가자
      • 글작성 : 6
      • 답글작성 : 2

      감사합니다~ 알려주신 내용들 덕분에 원하는 방향으로 해결했습니다

      CALayer extension 해서 sublayers들 layout 사이즈 조정하도록 처리했습니다

3 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom