2010-12-22 76 views
2

我有一個遵循UIAccessibilityContainer非正式協議的UIControl子類:它返回NO給-isAccessibilityElement,在訪問器中傳遞正確的-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

accessibilityFrame在屏幕座標中返回其答案,無需調整設備旋轉。

在蘋果的文檔中的某個地方,它建議你在這種情況下使用[UIWindow convertRect:toWindow:]。

+0

嗯,這是一個很好的觀點。它指出,「屏幕座標中的可訪問元素的框架。」我一定是第一次完全錯過了這個。不幸的是,-convertRect:toWindow:[帶有一個無窗口,爲了得到屏幕矩形]似乎沒有修改它。 – 2011-01-05 14:07:07