2017-08-31 116 views
1

我有以下代码:的iOS - 滚动型屏幕截图示出灰色部分

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 
} 

层次结构是这样的:查看 - >滚动型 - >查看 - >剩余的视图

滚动视图的屏幕截图,问题是为什么底部没有着色。

enter image description here

截图内视图。

enter image description here

应该如何看起来像

enter image description here

+0

是你所有的观点是滚动型的子视图,或者你有持有所有看法容器看法? –

+0

是这样的:查看 - > ScrollView - >查看 - >其余视图 – Ricardo

+0

然后尝试拍摄视图(滚动视图的子视图)的屏幕截图,并检查 –

回答

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 
} 
+0

删除'scrollview.layer.render'后只有'drawHierarchy(in:self.bounds,afterScreenUpdates:true)'Working? –

+1

我不得不添加它。 – Ricardo