2017-04-12 12 views
1

私は現在のスクリーンのキャプチャを取得しようとしています。次のビューコントローラをオーバーレイすると、その画像ビューの後ろにそれを半透明にすることができます。これは機能していましたが、今では途中で変な灰色ができます。ここで私が使用していたコードです:ここスクリーンキャプチャ - 奇妙な灰色の領域

func requestOverride(overrideReason : String, notificationName : Notification.Name) { 

    captureScreen { (image) in 
     ManagerOverride.image = image 

     let vc = UIStoryboard(name: "ManagerOverride", bundle: nil).instantiateViewController(withIdentifier: "overrideNav") as! UINavigationController 
     let over = vc.viewControllers.first as! ManagerOverrideViewController 
     let _ = over.view 
     over.overrideReason.text = overrideReason 
     over.notifyName = notificationName 
     UIApplication.shared.keyWindow?.currentViewController()?.present(vc, animated: true, completion: nil) 
    } 
} 

func captureScreen(completion: @escaping (UIImage) ->()) { 
let view = UIApplication.shared.keyWindow!.currentViewController()!.view! 
UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, UIScreen.main.scale) 
view.layer.render(in: UIGraphicsGetCurrentContext()!) 
let image = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 
completion(image!) 
} 

とは何であるか、私は戻って取得しています:

私は、そのコンテキスト内

答えて

0

レンダリングビューであることをやって、なぜ分かりません残念なことに100%の方法ではありません。すべてのビューとレイヤのプロパティがスクリーンショットに保存されているわけではありません。私が知っているのは、layer.maskです(または潜在的にmasksToBoundsフラグの状態です)。これはあなたの問題かもしれませんが、一部のビューはマスクを使用しますが、マスクされたスクリーン上ではマスクがレンダリングされるスクリーンショットでマスクはありませんでした。

関連する問題