2010-12-22 2 views
2

UIAccessibilityContainer 비공식적 인 프로토콜을 따르는 UIControl 하위 클래스가 있습니다. -isAccessibilityElement에 NO를 반환하고 올바른 -accessibilityElementCount 및 요소를 접근 자에 전달합니다.UIAccessoryElement, accessoryFrame 및 화면 회전이 깨졌습니다.

접근성 영역을 나타 내기 위해 만들어진 각 UIAccessibilityElement가 성공적으로 만들어지고 프레임은 드로잉하는 다른 CGRect의 1 : 1 매핑입니다.

예를 들어 {94, 99}, {209, 350}}에 드로잉 할 것이고 UIAccessibilityElement의 -accessibilityFrame은 동일한 CGRect 값으로 설정됩니다.

그러나 가로 방향 또는 거꾸로 세로 방향 일 경우 프레임 (접근성 요소에만 해당, 그리기는 여전히 잘 작동 함)이 잘못 회전됩니다. 프레임을 기준으로 한 왼쪽 상단 점은 항상 홈 버튼의 상단 왼쪽 모서리입니다. 당신이 볼 수 있듯이이 가로 모드에있어,

Screenshot

, 프레임은 지정 무엇을 완전히 믿을 수 없을되지 않습니다 :

다음은 시뮬레이터 스크린 샷입니다. 회전이 파열되는 것처럼 나에게 보이는

CGRect localRect = someCGRectVariable; 
CGRect globalRect = CGRectOffset(localRect, CGRectGetMinX(self.accessibilityFrame), CGRectGetMinY(self.accessibilityFrame)); 

UIAccessibilityElement *accElem = [[UIAccessibilityElement alloc]initWithAccessibilityContainer:self]; 

accElem.isAccessibilityElement = YES; 
accElem.accessibilityFrame = globalRect; 
accElem.accessibilityHint = [NSString stringWithFormat:NSLocalizedString(@"xyz %@", nil), someName]; 
accElem.accessibilityTraits = UIAccessibilityTraitButton; 
accElem.accessibilityLabel = nameValue; 

,하지만 난 그것에 내 손가락을 넣어 수 없습니다

다음은 요소의 생성을 구동하는 코드입니다. 세로 모드에서 완벽하게 작동한다는 점은 주목할 가치가 있습니다.

답변

1

accessibility 프레임은 기기 회전을 조정하지 않고 화면 좌표에서 답변을 반환합니다.

어딘가에이 경우에는 [UIWindow convertRect : toWindow :]를 사용하는 것이 좋습니다.

+0

흠, 좋은 지적입니다. "화면 좌표에서 접근성 요소의 프레임입니다." 나는 이것을 처음으로 완전히 놓쳤을 것임에 틀림 없다. 불행히도, -convertRect : toWindow : [화면 창을 갖지 않는 창]은 수정하지 않는 것 같습니다. –

+0

-convertRect : fromView : 무엇을 할 것인가. 그것을 지적 해 주셔서 감사합니다. –

관련 문제