2015-01-07 13 views
1

有沒有辦法來的UIPercentDrivenInteractiveTransition作用限制爲僅在視圖層次中最頂層的看法?限制效果,最上面的觀點

具體地說:如所解釋herehere交互式過渡設置容器視圖層的speed爲0,然後操縱timeOffset通過過渡擦洗。

如果例如我已經在含有視圖活動指示器,交互式過渡也擦洗通過活動指示器的旋轉動畫。它停止旋轉,並顯示出前後翻轉的交互式轉換。

有沒有辦法本地化設置speedtimeOffset的影響,並防止它們傳播通過任何或所有子視圖?

到目前爲止,我能想到的兩種可能的方法:

  1. 創建一個「屏障」層:子類CALayer並覆蓋setTimeOffset:,以防止或選擇性地防止更改

  2. 子類或替換UIPercentDrivenInteractiveTransition東西穿越子視圖層次結構,並選擇性地只擊中某些視圖

歡迎任何其他想法。

回答

0

這個問題的答案是否定的。根據AppleCALayer類採用CAMediaTiming「允許層定義相對於其超層的時間空間」。換句話說,在子層中指定的任何值timeOffsetbeginTime都與上面的圖層相加。正如文檔所述,「這種層次樹時間空間的概念提供了一個可擴展的時間線,從根層開始,通過它的後代。」

UIPercentDrivenInteractiveTransition通過清洗timeOffset[transitionContext containerView].layer。 (transitionContextid<UIViewControllerContextTransitioning>)。

因此它被施加的時間偏移,其隨後通過自動所有子層向下子層鏈通過。

沒有這樣的東西作爲一個「屏障」或「選擇性地只擊中某些層」,因爲此時間傳播受核心動畫內部處理。

0

你爲什麼不只是隱藏動畫的持續時間活動的指標?那當然沒有目的,有嗎?畢竟,這並不意味着「動畫正在進行中」 - 用戶不會將其視爲動畫,甚至不會將其視爲動畫過渡,而是作爲手指驅動的手勢。通過使用動畫的完成處理程序,您可以在動畫結束時再次輕鬆地顯示它。

+0

好想法。在這種情況下,雖然它意味着「網絡流量正在進行」,並且您隱藏它來取消操作。理想情況下,您可以改變主意,直到您解開手指並完成過渡。 – bcattle

+0

這不應該是這個意思。如果網絡流量正在進行,請使用UIApplication的「networkActivityIndi​​catorVisible」 - 這就是它的用途。 – matt

+0

同意。在這種情況下,它顯示了一個特定的圖像加載了幾個 – bcattle

1

你應該告訴活性動畫停止動畫,但在過渡期間保持可見。這與Apple在其應用程序中如何處理這一點是一致的。例如,在郵件應用程序中,執行「拉到刷新」以獲取新消息。當指標旋轉時,使用交互式流行手勢識別器大約一半。請注意,活動指示器在交互式轉換期間停止。

+0

我也喜歡這個建議。如果OP不想隱藏動畫製作者,他可以在轉換期間停止動畫。 – matt

+0

這是一個很好的建議,你可以免費得到這種行爲(時間同步),但我希望這個問題會更普遍一些。例如,你可能不想要AVPlayerLayer擦洗,但是當前傳播的'timeOffset'是這樣做的。 – bcattle