2012-09-21 69 views
5

我在應用商店中有近5星評級的應用,但是當iOS 6推出時,應用主視圖層次結構中的一些視圖開始閃爍。這發生在商店中的應用程序(我在iOS6出來時將其刪除)以及模擬器中。iOS 6視圖層次結構惡夢

我花了大約14個小時,嘗試了100件事,在Xcode中進行調試,但無法獲得任何牽引力。子視圖消失並重新出現,就像有一個gremlin隨機設置可見屬性,每個對象每秒最多10次,在一切正常的較長時間之間。

主界面是一個撥號,用戶可以旋轉,在一個圖層上使用3d轉換來旋轉它。我發現的唯一模式是4個消失的子視圖中的3個一起消失,就好像鎖定爲一個,當撥盤旋轉到某些離散位置時。

第4消失的子視圖應該是一個靜態圖像,它閃爍着,沒有明顯的模式。

我很想知道如何調試這個問題。這不是內存警告,執行額外的[setNeedsToDisplay]似乎沒有效果。我開始認爲蘋果公司在iOS6中打破了一些東西,但我找不到任何人在討論這些問題。


這裏是主視圖中的子視圖和CALayers的層次結構的細分:

  1. 我的層次結構包含2個基地CALayers是罰款。
  2. 上面是一個非常大的自定義UIView(使用drawRect)和一個閃爍在一起的大型UIImageVIew,當底部 被旋轉到某些位置時總是閃爍。只有最下面的一個正在旋轉 。
  3. 上面是一個不閃爍的自定義文本繪圖UIView。
  4. 上面是一個小的紅色圖釘UIImageView,它在 處閃爍,與上述2個視圖完全相同。這是一個香草 UIImageView;沒有轉換或子類或自定義繪圖代碼!而且它仍然具有相同的閃爍。
  5. 在上面是一個似乎無時無刻不在工作的無形UIButton。
  6. 上面是一個UIImageView那就是閃爍關閉 和不斷的小圖形,無關(我說聯繫的,因爲他們喜歡消失 一起)的 其他3「鏈接」層的基於旋轉的閃爍。
+2

您是否嘗試通過覆蓋'isHidden','alpha'和layers方法改變命令的setter來添加一些日誌消息?蘋果對UIKit做了一些改變,這是真的,但這並不意味着你不是那個對這個問題負責的人。就像他們在'UITouch.h'上有警告說'任何UIKit類的實例變量都應該被認爲是私有的......'並且猜測是什麼,這些變量在iOs6上不再公開。 –

+0

我做了你的建議,並增加了setHidden覆蓋:和setAlpha:在我的UIView子類有問題,並設置每個斷點 - 他們從來沒有被擊中。不知道你對UIKit的改變意味着什麼。 – avance

回答

2

嘗試手動設置視圖圖層z屬性以確保層次結構是您所需的。

+0

奇怪 - 我只在視圖控制器的viewDidLoad方法中設置了一次視圖層,並且他們開始正確。之後我沒有設置z-postiion的明確性,或者以任何其他方式重新排列圖層,所以它不應該有任何效果。儘管如此,我以極大的懷疑態度對你的建議進行了嘗試,而且它也做到了!非常感謝! – avance

3

(這是不是一個真正的答案,這是與大鼠的回答答覆,但我沒有信譽點尚未就此發表評論)

是,明確設置zPositions似乎解決它,是有點奇怪。我也遇到了這個問題,並在這裏發表了博文:iOS 6 Rendering Bug: 3D-Rotation Causes Layers to Render Without Respect for View Hierarchy。它似乎是iOS 6中引入的一個渲染錯誤。該博客有一個鏈接,指向我向Apple提交的錯誤的Open Radar版本,以及可以運行以查看錯誤和zPosition修復程序的示例項目。