티스토리 뷰

반응형


안녕하세요 :) Zedd입니다.

오늘은..Accessibility Programming Guide for iOS의 마지막 시리즈가 되겠네요.

저도 얼른 실전으로 가고싶지만...정말 이 Programming Guide를 반드시 읽어야 해요. 그냥 읽으면 읽을수록 읽길 잘했다는 생각이 드는 그런 가이드 입니다.

제 번역이 매끄럽지 않을 수도 있고, 이해가 가지 않는 부분도 있을 수 있어요! 그런 부분은 꼭 Accessibility Programming Guide for iOS으로 가셔서...다시한번 확인을 해주세요 :) 이해가 가질 않는다면 댓글이나 PC화면 오른쪽 하단에 있는 채널 서비스를 이용해서 메세지 주셔도 돼요!!

결론은...반드시 이 Accessibility Programming Guide for iOS를 읽어야 합니다.


Accessibility(접근성)이란?

Accessibility Programming Guide for iOS (1)

Accessibility Programming Guide for iOS (2)


Accessibility Programming Guide for iOS



● Defining Custom Attribute Information in Interface Builder

iOS SDK 3.0(.....)을 설치하면 응용 프로그램에 쉽게 액세스 할 수 있도록 도와주는 기능이 포함 된 Interface Builder 버전이 제공됩니다.
프로그램에 표준 UIKit 컨트롤과 View가 포함되어 있으면 Interface Builder에서 모든 접근 가능성 작업을 수행 할 수 있습니다.
Interface Builder를 사용하여 요소의 접근성 상태를 설정하고 label, hint 및 traits 속성에 대한 사용자 정의 컨텐츠를 제공 할 수 있습니다. 

뭐라는건지 모르겠죠?



표준 UIKit컨트롤이나 View를 클릭하고, 오른쪽 inspector에서 Show the identity inspector를 클릭해서 조금 내리면..Accessibility와 관련된 속성들을 설정할 수 있습니다..!!!! 전부터 말했던 Label이나 Hint도 여기서 줄 수 있네요. 

그리고 traits도..!!!! 

예를들어, 저번시간에 traits에서 들었던 예시를 들어서 설명해볼게요. 

"이미지를 놓고, 해당 이미지를 누르면 사파리 링크로 이동한다"라는게 있었죠? 이건 Image라는 traits와 Lint라는 traits의 합성이라고 그랬어요.

그런데...! 우리가 이미지를 놓고, 그냥 둔거에요. 그러면 걔는 그냥 이미지인거야.





왼쪽에 초록색 View는 ImageView에요. traits을 보면 그냥 image죠? 만약 시력이 불편한 사람이 해당 이미지를 탭해서 활성화하면 그냥 얘는 이미지인거에요.

VoiceOver사용자는 그냥 얘를 누르면 사파리 링크로 이어진다 이런걸 모르고, 그냥 아 얘는 이미지구나..라는 것만 알게된다는거에요!!!!!!!!!!!

실제로 VoiceOver를 돌려보면, 그냥 traits은 "이미지"라고만 합니다.


내가 그럼 "이미지를 누르면 사파리(뭐 어떤 브라우저든)로 링크가 돼!!"라는 것을 알려주고 싶죠?

그렇다면



여기에 Link라는 traits를 추가해주면, 이제 이 이미지의 traits은 이미지+링크의 합성이 되므로, VoiceOver는 이미지와 링크라는 traits을 둘 다 말해줍니다!!!!

그럼 VoiceOver사용자는 아 이미진데 링크가 있구나라는 사실을 알게되는 것이죠.

Hint까지 주면 완벽하겠죠?


자 그럼 복습해봅시다.....(뜬금)

여러분은 여기에 Hint를 준다면 어떤 Hint를 줄것인가요?

Hint가 뭐였죠? Hint 속성은 컨트롤이나 View에서 작업을 수행 한 결과를 설명합니다. 

라고 했는데...여러분이라면 이 ImageView의 Hint를 뭐라고 주실건가요?



"누르면 (또는 탭하면) 사파리로 이동" 이라고 생각하신 분 계신가요!?!?!?!?!





이러면 안된다고 저번시간에 배웠죠? Hint에는 행동이나 제스쳐의 이름은 포함하지 않는다구요.

그러니까 "누르면 (또는 탭하면) 사파리로 이동"에는 제스쳐가 들어가있죠? 그러니까 이러면 안되고, 

뭐 정답은 없겠지만, "사파리로 이동."이 Hint로 적절하겠네요. 이게 정답은 아니지만 지금 제가 말씀드리고 싶은건, Hint에 제스쳐를 포함하지 말라는 소리입니다. 


그냥 잠깐 복습해봤고 ㅎ

계속할게요


 Defining Custom Attribute Information Programmatically


위에서는 Interface Builder라고 언급했지만, 결국 스토리보드죠????!?!? 
스토리보드에서 할 수 있는건 제가 알고 있는...한...모두 코드로 할 수 있습니다.

그럼 코드로 해볼까요? 


myLabel.isAccessibilityElement = true
        
myLabel.accessibilityTraits = UIAccessibilityTraitButton
        
cs


이렇게!!!!!!! 해주면 됩니다. traits종류는 



이렇게나 있으니 ..

그냥 


여기있는거 다 있다고 생각하시면 됩니다.

그리고 제가 굳이 


myLabel.isAccessibilityElement = true        
cs


이걸 코드로 넣어준이유는...이게 기본이 아닌 애들도 있어서에요. 예를 들어 ImageView같은 경우는 이걸 true로 직접 해주지 않는 이상..접근가능한 요소가 되지 않습니다. Label이나 Button같은 경우에는 기본적으로 접근 가능해요! 근데 음...그냥 확인차...어떤건 기본이고, 어떤건 기본이 아니니까요 ㅎㅎ



 Enhance the Accessibility of Table Views

자..저번글에서 이렇게 말했죠. 


이렇게...

지금부터 TableView에서 접근성을 강화하는 방법에 대해서 알아보도록 할게요.


앱에서 각 셀에 Text이외의 항목이 포함된 TableView를 표시하는 경우, 더 쉽게 접근 할 수 있도록 할 수 있는 몇가지 방법이 있습니다.

마찬가지로, TableView에 row당 두가지 이상의 정보가 표시되는 경우, 정보를 하나의 이해하기 쉬운 Label로 묶어서 VoiceOver사용자의 경험을 향상시킬 수 있습니다. (오..)


Note : Table의 cell에 disclosure indicator, detail disclosure버튼, delete control과 같은 표준 TableView요소를 포함 한 경우에는 개발자가 따로 해당 요소에 접근 가능하도록 만들어줄 필요는 없습니다. 그러나 cell에 switch나 슬라이더와 같은 다른 타입의 컨트롤이 포함되어 있으면 이러한 요소에 적절하게 접근 할 수 있어야 합니다. 



앱 cell에 요소가 혼합되어 있으면, 사용자가 각 cell을 하나의 단위로 사용할지 또는 cell내부의 개별 요소와 상호작용 하는지 결정합니다. 사용자가 cell안의 개별 요소에 접근 해야 하는 경우 다음을 수행해야합니다.


각 요소를 개별적으로 접근 가능 할 수 있게 만듭니다.

TableView Cell자체에는 접근 할 수 없도록 하십시오.

cell전체 내용을 간략하게 설명하고, cell의 Label속성에 상세한 설명을 넣으십시오. 이 경우, Label은 cell내에서 접근 할 수 있는 요소 중 하나로 간주됩니다. 텍스트 및 컨트롤과 같은 여러 항목이 포함된 cell은 UI Accessibility programming interface에서 정의한대로 container view의 기준에 맞습니다.(fits the criteria of a container view,)

그러나 cell을 container view로 식별(identify)하거나 UIAccessibilityContainer 프로토콜의 메서드를 구현할 필요 없습니다. Table cell이 자동으로 container로 지정되기 때문입니다. (이 3번째 말이 잘 이해가 안가네요..)


Table에 개별 청크로 정보를 제공하는 cell이 포함되어 있으면 이러한 청크의 정보를 Label속성에 결합하는 것을 고려해야 합니다.

이렇게 하면 VoiceOver사용자는 각 정보에 별도로 접근하지 않고도 한번의 제스쳐로 cell컨텐츠의 의미를 얻을 수 있습니다.


이것이 어떻게 작동하는지에 대한 좋은 예는, 내장된 주식 앱에 있습니다. (주식앱이 있었다니)



앱 진심 처음 열어보는 것 같네요...


회사이름, 현재 주가 및 가격 변화를 별도의 문자열로 제공하는 대신, 주식앱은 이 정보를 Label에 결합합니다. "Apple Inc., 432.39 달러, 1.3 % 증가"라고 표시 될 수 있습니다.

이 방법으로 개별 정보를 결합하면 쉼표를 사용하여 VoiceOver가 구 사이에 잠시 멈추도록 지시 할 수 있으므로 사용자가 정보를 더 쉽게 이해할 수 있습니다. 


 Make Dynamic Elements Accessible

앱의 사용자 인터페이스 요소가 동적으로 변경 될 수 있는 경우, 사용자가 제공하는 "내게 필요한 옵션"정보가 정확하고 최신인지 확인해야합니다.

VoiceOver가 사용자가 새로운 레이아웃을 탐색하는 것을 도울 수 있도록, 앱 화면의 레이아웃이 변경되면 알림을 보내야합니다. UI Accessibility programming interface는 이러한 종류의 변경 사항이 화면에 나타날 때 사용 할 수 있는 두가지 알림 타입을 제공합니다. 자세한 내용은  UIAccessibility Protocol Reference.를 참고하세요. 


사용자 인터페이스 요소가 앱의 다른 조건에 따라 다른 상태가 될 수 있는 경우, 요소에 포함될 수 있는 각 상태에 대한 올바른 접근 가능성 정보를 반환하는 논리릌 코드에 추가해야합니다.

이러한 변경은 사용자의 결과로 발생할 수 있으므로, 이 논리를 하위 클래스의 구현에 추가하는 것이 가장 좋으며, 하위 클래스를 인스턴스화 하는 코드에는 추가하지 않는 것이 좋습니다.



 Make Nontextual Data Accessible

앱에서 접근성이 작동하는 방식과, 자동으로 호환되지 않는 데이터가 표시되는 경우가 있습니다. 예를들어 이미지를 표시 하는 경우, VoiceOver사용자가 이미지가 전달하는 정보를 이해할 수 있도록 내게 필요한 옵션 Label에 설명을 제공해야 합니다. 또는 별을 표시하는 등급 시스템과 같이 그래픽 방식으로 정보를 제공하는 경우, 내게 필요한 옵션 Label이 그래픽 표현의 의미를 전달하는지 확인해야 합니다.



끄아 드디어 Accessibility Programming Guide for iOS을 제대로 다 봤네요 XD

저는 읽기 정말 잘했다는 생각이 들어요..조금 이해가 안가서 힘들긴 했지만..

특히 2편이 가장 유익..했다고 할 수 있는데, Label과 Hint를 어떻게 써야하는지 알려줘서 좋았던 것 같아요. 그리고 이번거는 TableView에서의 접근성을 어떻게 해야하는지? 제 앱도 TableView로 이루어져 있는데, Label이 여러개 있거든요..근데 이걸 하나의 Label로 "합쳐서" 정보를 전달하라니.......고민을 조금 해봐야 할 것 같네요. 그 정보들을 어떻게 합쳐서 말해줄지..ㅎㅎ 

아무튼!!!!이 글이 접근성을 이해하시는데 도움이 되었길 바랍니다 :)

반응형