我正在尝试获取 uitableviewcell 的屏幕截图,我可以成功地做到这一点。但我无法将导航栏附加到 UIImage 的顶部。
这是我的: https://i.imgur.com/8ULUFg5.jpg
这是我想要得到的: https://i.imgur.com/w0IpoYA.png
如何将导航栏附加到图像?
我尝试创建新的 UIImage 来创建合并图像,但它不起作用。
下面是我正确获取单元格屏幕截图的代码。
let cell = self.entryView.cellForRow(at: self.indexP) as! entryViewTableCell
let frame = cell.frame
let kalan = self.indexP.row % 2
cell.entryText.backgroundColor = (kalan == 0) ? Theme.cellFirstColor : Theme.cellSecondColor
cell.entryText.text = ""
UIGraphicsBeginImageContextWithOptions(cell.entryText.frame.size, true, 2)
cell.entryText.attributedText = self.entryler[self.indexP.row]
cell.entryText.textColor = Theme.labelColor
cell.entryText.tintColor = Theme.linkColor
cell.entryText.layer.render(in: UIGraphicsGetCurrentContext()!)
let snapshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
编辑: https://i.imgur.com/OR4gV6L.jpg
我可以用下面的代码得到这张图片,但是导航栏的不透明度太低了。我怎样才能不透明?
let cell = self.entryView.cellForRow(at: self.indexP) as! entryViewTableCell
let frame = cell.entryText.frame
let kalan = self.indexP.row % 2
cell.entryText.backgroundColor = (kalan == 0) ? Theme.cellFirstColor : Theme.cellSecondColor
cell.entryText.text = ""
UIGraphicsBeginImageContextWithOptions(frame.size, true, 2)
cell.entryText.attributedText = self.entryler[self.indexP.row]
cell.entryText.textColor = Theme.labelColor
cell.entryText.tintColor = Theme.linkColor
cell.entryText.layer.render(in: UIGraphicsGetCurrentContext()!)
let snapshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIGraphicsBeginImageContextWithOptions((self.navigationController?.navigationBar.layer.frame.size)!, true, 2)
self.navigationController?.navigationBar.drawHierarchy(in: (self.navigationController?.navigationBar.bounds)!, afterScreenUpdates: false)
self.navigationController?.navigationBar.layer.render(in: UIGraphicsGetCurrentContext()!)
let ss = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let img = self.getMixedImg(image1: ss!, image2: snapshot!)
func getMixedImg(image1: UIImage, image2: UIImage) -> UIImage? {
let size = CGSize(width: image1.size.width, height: image1.size.height + image2.size.height)
UIGraphicsBeginImageContextWithOptions(size, true, 2)
image1.draw(in: CGRect(x: 0,y: 0,width: size.width, height: image1.size.height))
image2.draw(in: CGRect(x: 0,y: image1.size.height,width: size.width, height: image2.size.height))
let finalImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return finalImage
}
最佳答案
这是我的问题的答案:
let cell = self.entryView.cellForRow(at: self.indexP) as! entryViewTableCell
let frame = cell.entryText.frame
let kalan = self.indexP.row % 2
cell.entryText.backgroundColor = (kalan == 0) ? Theme.cellFirstColor : Theme.cellSecondColor
cell.entryText.text = ""
UIGraphicsBeginImageContextWithOptions(frame.size, true, 3)
cell.entryText.attributedText = self.entryler[self.indexP.row]
cell.entryText.textColor = Theme.labelColor
cell.entryText.tintColor = Theme.linkColor
cell.entryText.layer.render(in: UIGraphicsGetCurrentContext()!)
let snapshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIGraphicsBeginImageContextWithOptions((self.navigationController?.navigationBar.layer.bounds.size)!, true, 3)
self.navigationController?.navigationBar.drawHierarchy(in: (self.navigationController?.navigationBar.layer.bounds)!, afterScreenUpdates: false)
let ss = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let img = self.getMixedImg(image1: ss!, image2: snapshot!)
func getMixedImg(image1: UIImage, image2: UIImage) -> UIImage? {
let size = CGSize(width: image1.size.width, height: image1.size.height + image2.size.height)
UIGraphicsBeginImageContextWithOptions(size, true, 2)
image1.draw(in: CGRect(x: 0,y: 0,width: size.width, height: image1.size.height))
image2.draw(in: CGRect(x: 0,y: image1.size.height,width: size.width, height: image2.size.height))
let finalImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return finalImage
}
关于ios - 如何获取带有导航栏的特定 uitableviewcell 屏幕截图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57299353/