[iOS]<BearPlay> 텍스트 애니메이션 수정

RudinP·2024년 1월 9일
0

Projects

목록 보기
20/28

문제

현재 발생하는 문제는 다음과 같다

  • 셀 선택 시 바로 NowPlaying에 애니메이션이 재생되지 않고, 셀을 한 번 더 눌러야 애니메이션 재생
    • 셀을 한 번 눌렀을 시, didselect가 호출되지 않고 highlighted로 간주되기 때문이다.
  • 셀 선택 시 애니메이션이 재생되지 않을 때, 다른 셀을 선택 시 NowPlaying에 타이틀 표시가 안되는 현상 발생
    • 앞선 문제로 인해 이미 animation이 재생되어 center의 값이 변경된 상태이기 때문.
  • 이따금 <- 방향으로 글자가 이동하지 않고, -> 방향으로 글자가 이동함
    • 앞선 문제로 인해 animation이 재생되고 있어 center값이 음수인 현상으로 animation 수식은 문제 없음
  • 애니메이션 수식이 아예 글씨가 안보일때까지 재생되는 현상
    • 수식 문제.

애니메이션 수식 수정


UILabel의 끝부분이 설정해둔 superview의 범위의 끝부분이 되려면
self.center.x + self.bounds.width/2.0 = superview.center.x + superview.bounds.width/2.0 이어야 한다.
여기서 superview만 autoLayout으로 padding을 16 주었으므로 -16이 들어가야 한다.

셀 선택 시 애니메이션 재생 안되는 현상 수정

선택된 곡의 제목이 표시되도록 정해진 부분의 길이보다 길 경우 애니메이션을 재생하도록 의도하였다.
그러나 한 번 눌렀을 때, 재생이 되지 않았기 때문에 선택한 셀의 곡 제목 길이를 출력하도록 해보았다.


그 결과, 현재 선택한 셀의 제목 길이가 한 차례씩 밀려 표시되는 것 을 확인하였다. 즉, 셀 선택 상황에서 이전의 NowPlayingTitle 길이를 읽어오는 것이었다. 이는 선택한 셀의 제목으로 바뀐 후가 아닌, 이전의 레이블의 bounds.width를 먼저 확인해 발생하는 문제인 듯 했다.
willSelectRowAt으로 미리 해봐도 값은 동일했다.
따라서 breakPoint를 추가하여 실행해보았다.


선택 결과, nowPlayingTitle에 text변화가 아직 일어나지 않은 것을 확인할 수 있었다. 내 예상으로는 text의 변화에 따른 UILabel의 frame 업데이트가 일어나지 않았음이 원인이었다.
이를 토대로 stackOverFlow에서 삽질한 결과, 답을 찾을 수 있었다.
바로 layer.layoutIfNeeded()를 이용해서 강제로 해당 UIView를 업데이트해주는 것이었다.

선택한 셀에 따라 바로 값이 제대로 출력된다.

실행 결과

이제 제대로 출력된다!

profile
iOS 개발자가 되기 위한 스터디룸...

0개의 댓글