

TextViewのフルスクリーンショットを撮りたいのですが、TextViewをスクロールしても、見えてない部分もスクリーンショットで撮影したいのですが、TextViewで見えてない部分が見切れてしまうか、撮影できない状態です。

[code]

    func screenShot() {
    
        let size = CGSize(width: self.textView.contentSize.width, height: self.textView.contentSize.height)
    
        UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
        let context: CGContext = UIGraphicsGetCurrentContext()!
    
        textView.layer.render(in: context)
    
        let Image : UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    
        UIGraphicsEndImageContext()
    
        UIImageWriteToSavedPhotosAlbum(Image, nil, nil, nil)
    
    }
    
[/code]

現状調べているのですが、

[code]

    UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
    
[/code]

を

[code]

    UIGraphicsBeginImageContextWithOptions(textView.frame.size, false, UIScreen.mainScreen().scale)
    
[/code]

に変更したり試しているのですが解決していません。  
ご教示お願いします。


CC BY-SA 4.0
2020-03-22T04:49:09.143
64021
2020-03-22T19:24:09.570
23704
question
swift ios xcode
スクリーンショットの撮り方


グラフィックスコンテキストのサイズを大きくしてもテキストビューのサイズがそのままなので、表示されていない部分は描画されません。

見えないスクロール領域も含めて撮影するなら、コンテンツが収まるサイズまでテキストビュー自体を拡大してコンテキストに描画します。

必要に応じて、サイズを変更する前に元のサイズとスクロール位置を退避しておき、スクリーンショットを撮ったあとに元のサイズに復元します。

[code]

    // スクリーンショットを撮ったあと戻すために保存する（戻さないなら不要）
    let savedFrame = textView.frame
    let savedContentOffset = textView.contentOffset
    
    // コンテンツが収まるサイズまで拡大する
    textView.contentOffset = .zero
    textView.frame = CGRect(origin: .zero, size: textView.contentSize)
    
    textView.layer.render(in: context)
    
    // サイズとスクロール位置を復元する（戻さないなら不要）
    textView.contentOffset = savedContentOffset
    textView.frame = savedFrame
    
[/code]


CC BY-SA 4.0
2020-03-22T19:24:09.570
64030
2020-03-22T19:24:09.570
5519
64021
answer