ios - 滚动时将 UIScrollView 捕获到 UIImage

标签 ios swift uiscrollview

我正在尝试在外部屏幕上镜像 iPad View 中发生的事情。

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 中滚动只会在滚动结束后反射(reflect)在快照中。我相信 ScrollView 在滚动期间并没有真正更新它的 View 层次结构和布局以提高效率。但是,我需要在滚动过程中捕获它。

我试过:

  • 屏幕更新后:真

在 scrollViewDidScroll 中:

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

是否可以在滚动过程中捕获 ScrollView ?

编辑澄清:

层次结构:

  • UIWindow <- 我想截屏
  • ----UIView
  • --------UIScrollView <- 我不知道这个

最佳答案

请移除Timer并调用scrollViewDidScroll中的startMirroring()方法,我已经尝试了你的场景并获得了对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
  }
}

希望对你有帮助

关于ios - 滚动时将 UIScrollView 捕获到 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45893940/

相关文章:

ios - Unity iOS 屏幕在启动时变黑几秒钟

ios - 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因 : '-[_. AppDelegate add:]: 无法识别的选择器

ios - 在 iOS Web 应用程序中启用 “save image”

xcode - TTTAttributedLabel addLinkToURL NSRange 混淆

ios - 调用另一个类中的函数,该函数通过 IBaction 读取动态变量

iphone - CGRectOffset 导致滑动方向错误

IOS UIScrollView - 同时滚动和点击元素

iOS - AWS Cognito - "NotAuthorizedException"- 登录名不匹配

arrays - 解析 JSON Swift 4

iphone - UIScrollView 在第一次触摸时跳下