ios - How do I screenshot a uiview without adding it to the subview? -
i have multiple subviews on parent view, , need convert uiview uiimage of subviews. added tag views needed take screenshot of , added own view, when try screenshot black screen. however, when use regular parent view photo subviews.
let viewpic = uiview() subview in self.view.subviews { if(subview.tag == 6) { viewpic.addsubview(subview) } if(subview.tag == 8) { viewpic.addsubview(subview) } } let picimage = viewpic.getsnapshotimage() //this black screen
getsnapshotimage
extension uiview { public func getsnapshotimage() -> uiimage { uigraphicsbeginimagecontextwithoptions(self.bounds.size, self.isopaque, 0) self.drawhierarchy(in: self.bounds, afterscreenupdates: false) let snapshotitem: uiimage = uigraphicsgetimagefromcurrentimagecontext()! uigraphicsendimagecontext() return snapshotitem } }
first of all, viewpic
doesn't set frame size default 0 frame may cause issue.
secondly, tried use getsanpshotimage()
on sample project, blank image.
have @ demo code, can want (see screenshot):
class viewcontroller: uiviewcontroller { override func viewdidload() { super.viewdidload() // additional setup after loading view, typically nib. let viewpic = uiview() viewpic.frame = self.view.frame let view1 = uiview() view1.frame = cgrect(x: 0, y: 0, width: 100, height: 100) view1.backgroundcolor = uicolor.red viewpic.addsubview(view1) let view2 = uiview() view2.frame = cgrect(x: 0, y: 200, width: 100, height: 100) view2.backgroundcolor = uicolor.blue viewpic.addsubview(view2) let picimage = viewpic.converttoimage() //this black screen print(picimage) } override func didreceivememorywarning() { super.didreceivememorywarning() // dispose of resources can recreated. } } extension uiview { func converttoimage() -> uiimage { let renderer = uigraphicsimagerenderer(bounds: bounds) return renderer.image { renderercontext in layer.render(in: renderercontext.cgcontext) } } }
Comments
Post a Comment