무한 Scroll Calendar와 VoiceOver를 추가한 뒤의 문제점 - boostcampwm-2021/iOS04-OwnMyWay GitHub Wiki

문제 상황

  • 기존에는 FSCalendar Library를 활용하여 날짜 선택 부분을 구현해둔 상태였습니다.
  • 그러나 VoiceOver 기능을 추가하면서 FSCalendar의 특정 부분에 VoiceOver를 적용하는것이 어렵다는 문제가 발생했습니다.
  • 따라서 Calendar를 직접 구현해야하는 필요성이 생겨서 FSCalendar를 대체하는 OMWCalendar를 직접 만들었습니다.
    • Scroll시 이전/이후 달력으로 Scroll(Animation 보여줌) 후 Animation이 없는 채로 현재 스크롤View를 다시 가운데로 이동한 뒤 3개의 컬렉션 뷰의 내용을 업데이트(가운데를 이동한 달로 변경)
  • 이 때 VoiceOver를 키면 원하는대로 Calendar의 Cell들을 읽어주도록 만들 수 있지만 좌우로 스크롤할 경우 스크롤 자체에 VoiceOver Focus가 생겨서 Scroll View의 Content Offset을 정중앙으로 이동시킬 수 없었습니다.

문제 해결

  • ScrollView에게 Focus가 가는 것을 막기 위해 Scroll View의 isAccessibilityElement를 false로 설정하여 주었습니다.
    • 그러나 이렇게 할 경우 VoiceOver에서 Scroll 자체가 막히는 문제가 발생하였습니다.
  • 따라서 이전달 혹은 다음달로 콜렉션뷰의 데이터를 업데이트해주는 버튼을 사용하면 어떻겠냐는 의견이 나왔습니다.
    • Scroll의 경우 VoiceOver 사용자가 스크롤을 하면 이전달, 다음달로 넘어갈 수 있다는 것을 알아차리기 어려울 수도 있겠다는 생각을 했습니다.
    • 만약 이전달/다음달 버튼을 달아놓을 경우 VoiceOver를 사용하는 유저가 버튼을 읽으면 이전달, 다음달로 이동할 수 있다는 것을 쉽게 인지가능할 것이라는 판단을 했습니다.
    • 또한 Scroll 자체에 VoiceOver Focus가 설정되어 Scroll을 정중앙으로 되돌리지 못하는 문제도 막을 수 있어서 VoiceOver를 킬 경우 스크롤을 막고 버튼을 통해 이동하도록 하는 방안을 채택하였습니다.