현재 발생하는 문제는 다음과 같다
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를 업데이트해주는 것이었다.
선택한 셀에 따라 바로 값이 제대로 출력된다.
이제 제대로 출력된다!