【问题标题】:iOS - Scrollview screenshot is showing grey partsiOS - Scrollview 屏幕截图显示灰色部分
【发布时间】:2017-08-31 11:32:29
【问题描述】:

我有以下代码:

func takeScrollScreenshot() -> UIImage? {

    let scrollview: UIScrollView = self as! UIScrollView
    UIGraphicsBeginImageContext(scrollview.contentSize)
    let savedContentOffset = scrollview.contentOffset
    let savedFrame = scrollview.frame
    scrollview.contentOffset = CGPoint.zero;
    scrollview.frame = CGRect(x: CGFloat(0),
                              y: CGFloat(0),
                              width: scrollview.contentSize.width,
                              height: scrollview.contentSize.height);
    scrollview.layer.render(in: UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext();
    scrollview.contentOffset = savedContentOffset
    scrollview.frame = savedFrame
    UIGraphicsEndImageContext()

    return image
}

层次结构是这样的:View -> ScrollView -> View --> 其余视图

scrollview截图,问题是为什么底部没有上色。

内部视图的屏幕截图。

应该是什么样子

【问题讨论】:

  • 您的所有视图是滚动视图的子视图,还是您拥有包含所有视图的容器视图?
  • 是这样的:View -> ScrollView -> View --> 剩余的视图
  • 然后尝试截取 View 的屏幕截图(scrollview 的子视图)并检查
  • 我会尝试,但奇怪的是相同的功能只是在这个屏幕上失败
  • 是的! .你的代码没有问题。即使为我工作,这也是我告诉你使用 View 的原因

标签: ios swift


【解决方案1】:

我找到了解决方案。 我只需要添加行drawHierarchy(in: self.bounds, afterScreenUpdates: true)

func takeScrollScreenshot() -> UIImage? {

    let scrollview: UIScrollView = self as! UIScrollView
    UIGraphicsBeginImageContext(scrollview.contentSize)
    let savedContentOffset = scrollview.contentOffset
    let savedFrame = scrollview.frame
    scrollview.contentOffset = CGPoint.zero;
    scrollview.frame = CGRect(x: CGFloat(0),
                              y: CGFloat(0),
                              width: scrollview.contentSize.width,
                              height: scrollview.contentSize.height);
    scrollview.layer.render(in: UIGraphicsGetCurrentContext()!)

    //I forget add this line.
    drawHierarchy(in: self.bounds, afterScreenUpdates: true)

    let image = UIGraphicsGetImageFromCurrentImageContext();
    scrollview.contentOffset = savedContentOffset
    scrollview.frame = savedFrame
    UIGraphicsEndImageContext()

    return image
}

【讨论】:

  • 删除 scrollview.layer.render 后仅 drawHierarchy(in: self.bounds, afterScreenUpdates: true) 工作?
  • 我必须添加它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多