2016-11-04 2 views
1

次のコードを使用して、自分のビューのスクリーンショットを取得しています。afterScreenUpdates:trueのときdrawHierarchyが失敗する

UIGraphicsBeginImageContext(self.view.bounds.size) 
self.view.drawHierarchy(in: self.view.bounds, afterScreenUpdates: true) 
let wholeImage = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 

"afterScreenUpdates:"をfalseに設定すると、正しく動作します。

*** Assertion failure in -[UIApplication _performWithUICACommitStateSnapshotting:](), /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3600.5.2/UIApplication.m:6882 

ブレークポイントを使用して、私はエラーがdrawHierarchy法にスローことが判明:私はこれをtrueに設定した場合でも、私は次のエラーを取得します。誰もこのエラーを見たことがありますか?何が起きているのか?私は、スナップショットを取得する前に、ビューの更新(いくつかのuiimagesを隠している)を取り除こうとしましたが、効果はありません。

このエラーでアプリがフリーズしますが、ハードストップはありません(バックトレースを見るためにデバッガと対話できません)。もしそれが不明であれば申し訳ありません。

答えて

1

このエラーも発生しました。問題は、iOSのすべてのUIKit作業をメインスレッドで行う必要があることです。メインスレッドからのDispatchQueue.async呼び出しでこれをラップするのが簡単な解決策です。

var wholeImage : UIImage? 

DispatchQueue.main.async { 
    UIGraphicsBeginImageContext(self.view.bounds.size) 
    self.view.drawHierarchy(in: self.view.bounds, afterScreenUpdates: true) 
    self.wholeImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
} 
関連する問題