uiscrollview 截图问题_请问获取UIScrollView的屏幕截图,包括屏幕外部分

我必须在iOS 8和更高版本上实现这一点,并在iPhone上进行测试。接受的答案只是呈现滚动视图的可见部分,而图像的其余部分仍然是空白的。

我试着用drawViewHierarchyInRect-运气不好取决于afterScreenUpdates赋存true或false我被拉伸了一部分图像或者只是部分内容。

实现正确的快照的唯一方法是UIScrollView其全部内容是将其添加到另一个临时视图中,然后呈现它。

示例代码如下(scrollview是我的VC中的插座)func getImageOfScrollView() -> UIImage {

var image = UIImage()

UIGraphicsBeginImageContextWithOptions(self.scrollView.contentSize, false, UIScreen.mainScreen().scale)

// save initial values

let savedContentOffset = self.scrollView.contentOffset    let savedFrame = self.scrollView.frame    let savedBackgroundColor = self.scrollView.backgroundColor    // reset offset to top left point

self.scrollView.contentOffset = CGPointZero

// set frame to content size

self.scrollView.frame = CGRectMake(0, 0, self.scrollView.contentSize.width, self.scrollView.contentSize.height)

// remove background

self.scrollView.backgroundColor = UIColor.clearColor()

// make temp view with scroll view content size

// a workaround for issue when image on ipad was drawn incorrectly

let tempView = UIView(frame: CGRectMake(0, 0, self.scrollView.contentSize.width, self.scrollView.contentSize.height))

// save superview

let tempSuperView = self.scrollView.superview    // remove scrollView from old superview

self.scrollView.removeFromSuperview()

// and add to tempView

tempView.addSubview(self.scrollView)

// render view

// drawViewHierarchyInRect not working correctly

tempView.layer.renderInContext(UIGraphicsGetCurrentContext())

// and get image

image = UIGraphicsGetImageFromCurrentImageContext()

// and return everything back

tempView.subviews[0].removeFromSuperview()

tempSuperView?.addSubview(self.scrollView)

// restore saved settings

self.scrollView.contentOffset = savedContentOffset    self.scrollView.frame = savedFrame    self.scrollView.backgroundColor = savedBackgroundColor    UIGraphicsEndImageContext()

return image}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值