web-dev-qa-db-ja.com

スクリーンショットのみ画面の一部-Swift

私はこのSwiftコードを使用してアプリのスクリーンショットを撮ります:

UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, 0);
self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

ここで行うように、画面のすべてではなく、一部のみのスクリーンショットを撮るにはどうすればよいですか?

18
tdh

たとえば、位置(50,50)で高さ(100,150)UIView長方形のスクリーンショットを撮りたい場合です。

まず、画像コンテキストを長方形のサイズに設定します。画像サイズを設定します。

UIGraphicsBeginImageContextWithOptions(CGSizeMake(100,150), false, 0);

ここで、このコンテキストで、スクリーンショットの表示部分(50,50)で始まるようにビューを描画します。

self.view.drawViewHierarchyInRect(CGRectMake(-50,-50,view.bounds.size.width,view.bounds.size.height) afterScreenUpdates: true)

contextのサイズを設定したため、これは(100,150)でのスクリーンショットをクリップします。ここからUIImageを取得します。

var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
37
rakeshbs

これが画面の一部を撮影するための最良の答えだと思います。

func screenShot() {
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.frame.size.width*0.99,self.frame.size.height*0.70), false, 0)
    var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
    self.view?.drawViewHierarchyInRect(CGRectMake(-01, -01, self.frame.size.width, self.frame.size.height), afterScreenUpdates: true)
    var screenShot  = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
}
0
Rex

UIVisualEffect(Blur/Vibrancy)を含むビューのスナップショットを作成するには、こちらのソリューションを参照してください: https://stackoverflow.com/a/33633386/802196

0
ObjectiveTC

別のUIViewの領域で選択してスナップショットを撮るため

// viewObject: UIView linked from storyboard
var bounds= CGRect(x: -viewObject.frame.minX,y: -viewObject.frame.minY,width: view.bounds.size.width,height: view.bounds.size.height)

UIGraphicsBeginImageContext(viewObject.frame.size)
        view.drawHierarchy(in: bounds, afterScreenUpdates: true)
        let outputImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
0
Piakkaa