2017-08-26 11 views
0

私は外部スクリーン上のiPad上で起こっていることをミラーリングしようとしています。スクロールが終了した後にUISmrollをUIImageにキャプチャしてスクロールしています

func startMirroring() { 
    Timer.scheduledTimer(timeInterval:0.05, target: self, selector: #selector(tick), userInfo: nil, repeats: true) 
} 

func tick() { 
    let snapshot = someView.snapshotImage() 
    placeSomewhereElse(image: snapshot) 
} 

extension UIView { 
    func snapshotImage() -> UIImage? { 
     UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, 0) 
     drawHierarchy(in: bounds, afterScreenUpdates: false) 
     let snapshotImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return snapshotImage 
    } 
} 

問題

スクロールscrollviewでは、スナップショットのみに反映されます。私は、スクロールビューが実際に効率を上げるためにスクロール中のビューの階層とレイアウトを更新していないと信じています。私はしかし、スクロール中にそれをキャプチャする必要があります。

私が試した:

  • afterScreenUpdates:

真scrollViewDidScrollで:

  • setNeedsDisplay()
  • layoutIfNeeded()
  • setNeedsLayoutを()

スクロール中にスクロールビューをキャプチャすることはできますか?

明確にする編集:

階層:

  • UIWindow < - 私はこの
  • ---- UIViewの
  • -------- UIScrollViewの<のスナップショットを作成したい - 私これについて知りません

答えて

2

scをstartMirroring()メソッドで呼び出してください。 rollViewDidScrollが、私はあなたのシナリオを試してみましたが、scrollviewの継続的な監視を持っている、

func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    print("scrolling") 
    startMirroring() 
} 

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { 
    print("scrolling ends") 
} 

func startMirroring() { 
    imgView.image = scrollView.snapshotImage() 
} 

extension UIView { 
    func snapshotImage() -> UIImage? { 
     UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, 0) 
     drawHierarchy(in: bounds, afterScreenUpdates: false) 
     let snapshotImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return snapshotImage 
    } 
} 

は、私がscrollviewsだけでなく、特定のscrollviewsが含まれている「かもしれない」というビュー全体をキャプチャしたい

+0

役に立つことを願っています。ビュー階層のスクロールビューを別々に扱うためにこれを使うことができます。これは既に素晴らしいですが、理想的にはビュー階層についての知識なしにやりたいと思っています。 – matteok

+0

scrollView.snapshotImage()(例:someView.snapshotImage())の代わりにViewを保存してください。 –

+0

潜在的なビュー階層を表示するために自分の投稿を編集しました – matteok

関連する問題