2016-10-22 16 views
4

サブビューを含むビューをキャプチャしたい。このコードを使用して画面をキャプチャしています:Swift:サブビュー付きのビューのスクリーンショットを保存するにはどうすればいいですか?

let view = self.faceTrackerContainerView 

UIGraphicsBeginImageContext(CGSizeMake(view.bounds.size.width, view.bounds.size.height)) 
UIGraphicsGetCurrentContext()! 
self.view?.drawViewHierarchyInRect(view.frame, afterScreenUpdates: true) 
let screenshot = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 

UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil) 

これらのコードは、ビューの前にあるボタンを含む画面全体をキャプチャします。私はこれらのコードを試みたが、それが唯一のサブビューを除く主なビューをキャプチャ:

let view = self.faceTrackerContainerView 
let scale = UIScreen.mainScreen().scale 
UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, scale); 

view.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
let screenshot = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 

UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil) 

私もここからsnapshotViewAfterScreenUpdates(true)を試してみましたが、私はそれを実装する方法がわかりません。私はビューの下にcollectionViewとビューの上にボタンを持っています(どちらもビューにありません)。最初のコードは、button、collectionView、およびsubviewを使用してすべてをキャプチャします。 2番目のコードは、サブビューなしでビューをキャプチャします。私が何が欠けているのか、それ以外に何ができるのか教えてください。ありがとう!

+0

キャプチャしたいすべてのサブビューが画面に表示されますか? – BaSha

+0

はい、そうです。私は、私がスクリーンショットで望んでいないビューを隠して、それを後で戻すと思う。 – Vinz

答えて

1

snapshotView(afterScreenUpdates:)に電話をかけてみませんか?

+0

コードをありがとう。私はこれでかなり新しいです。どの部分を変更/修正する必要があるのか​​教えていただけますか? – Vinz

+0

@Vinz:私は方法が直接UIImageではなく、キャプチャされたビューをレンダリングするUIViewを返すと言いました - Photos Albumに保存したい – BaSha

+0

私はそれを使用しようとしましたが、動作させることはできません。私の試みの一つで私に空白を与えました。 – Vinz

7

これは

func screenShotMethod() { 
    //Create the UIImage 
    UIGraphicsBeginImageContext(faceTrackerContainerView.frame.size) 
    faceTrackerContainerView.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    //Save it to the camera roll 
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) 
} 

Ref

+0

こんにちは。ありがとう。これはコードを取得した場所でもあり、画面上のすべてをキャプチャしています。私はちょうどそのサブビューとビューをキャプチャしたいです。 – Vinz

+0

上記のコードから 'self.faceTrackerContainerView'を使って' view'を変更しようとしてください。 –

+0

私はそれを試みましたが、しかし、renderInContextメソッドを持っているビューをdown't。 – Vinz

0

、私のために働いていることは非常にエレガントではありませんが、スクリーンショットの前にビューを非表示にする作品を撮影したものです。その後、それらを表示することができます。

view.isHidden = true 

//screenshot 

view.isHidden = false 
1
extension UIView { 
    func asImage() -> UIImage { 
     let renderer = UIGraphicsImageRenderer(bounds: bounds) 
     return renderer.image { rendererContext in 
      layer.render(in: rendererContext.cgContext) 
     } 
    } 
} 

それはUIViewのからUIImageになります。次に、UIImageView(image :)メソッドでその画像を使用できます

関連する問題