2017-03-08 62 views
0

當我們改變視圖的隱藏屬性時,有一種方法可以確定視圖變得完全可見或隱藏的確切點,即繪製操作完成。UIView變爲可見代表

在我的應用程序中,一旦視圖被隱藏,我必須截取屏幕截圖,目前我添加了330ms的延遲,以確保視圖完全隱藏,我想擺脫這種任意延遲。

我已經嘗試了幾個像KVO這樣的視圖隱藏屬性,我繼承了UIView類,並試圖利用viewDidMoveToSuperView委託,但所有這些事情並不保證視圖繪製已完成。

回答

1

兩個想法立刻浮現在腦海:

  1. 安排在主隊列,這將可能運行環路(由應該發生的時間視圖重繪)的下一次迭代後,被稱爲塊。

    dispatch_sync(dispatch_get_main_queue(), ^{ 
        // take your snapshot 
    }); 
    
  2. 操縱視圖的動畫中的塊不透明度(hidden不能動畫但alpha可以)和採用的完成處理程序。

    [UIView animateWithDuration:0 animations:^{ 
        view.alpha = 0; 
    } completion:^(BOOL finished) { 
        // take your snapshot 
    }]; 
    
+0

當動畫的持續時間被設置爲0比完成塊立即調用。我嘗試了這些方法,但他們沒有幫助,所以我想知道是否有某種委託/通知/回調,以確保他們查看繪圖完成。 –

+0

@MohammadSalman:你用什麼方法制作屏幕截圖? – zygoat

+0

我嘗試了多種方式來截取像下面的截圖:'UIGraphicsBeginImageContextWithOptions(self.view.bounds.size,self.view.opaque,0.0);' '[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];' 'UIImage * image = UIGraphicsGetImageFromCurrentImageContext();' 'UIGraphicsEndImageContext();' 但我仍然面臨的問題(我看到其他帖子也類似於我的問題),我無法找到一種方法來確保視圖繪製已完成,而不會在代碼中添加任何延遲。 –

相關問題