0

私はそれUIView canvasスクリーンショットを保存したいと思います. これはシミュレーターで機能しますが、私が好きな方法で画像を生成しません:UIBarButton shareBarButton

スナップショットを iPhone の画面とまったく同じように表示したいのです。そのため、形状の一部が画面からはみ出す場合、スナップショットは画面に表示されている形状の部分のみをキャプチャします。また、スナップショットのサイズは、canvas基本的にビューのサイズと同じですが、高さがわずかに短くなります。

canvas = UIView(frame: CGRectMake(0, 0, view.bounds.height, view.bounds.height-toolbar.bounds.height))

誰かが私がスナップショットを作成する際に間違っていることを教えてくれたら、それは大歓迎です!

私のコード:

func share(sender: UIBarButtonItem) {
    let masterpiece = canvas.snapshotViewAfterScreenUpdates(true)
    let image = snapshot(masterpiece)

    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}

func snapshot(masterpiece: UIView) -> UIImage{
    UIGraphicsBeginImageContextWithOptions(masterpiece.bounds.size, false, UIScreen.mainScreen().scale)
    masterpiece.drawViewHierarchyInRect(masterpiece.bounds, afterScreenUpdates: true)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image

}
4

1 に答える 1

1

最初の例では、UIWindow をスナップショットして、問題が解決するかどうかを確認します。

これは私が使用するUIWindow拡張機能です(特にカメラワーク用ではありません)-試してみてください。

import UIKit

extension UIWindow {

  func capture() -> UIImage {

      UIGraphicsBeginImageContextWithOptions(self.frame.size, self.opaque, UIScreen.mainScreen().scale)
      self.layer.renderInContext(UIGraphicsGetCurrentContext()!)
      let image = UIGraphicsGetImageFromCurrentImageContext()
      UIGraphicsEndImageContext()

      return image
  }

}

私はそれを次のように呼びます:

let window: UIWindow! = UIApplication.sharedApplication().keyWindow

let windowImage = window.capture()
于 2016-01-04T17:31:09.803 に答える