Используя следующий код, чтобы взять снимок из AGSMapViewПринимая снимок AGSMapView
Этот код устанавливается свойство kEAGLDrawablePropertyRetainedBacking, его нужно еще будет взять белый снимок.
let layer = self.AgsMapView.layer as! CAEAGLLayer
layer.drawableProperties = [
kEAGLDrawablePropertyRetainedBacking: NSNumber(int: 1), kEAGLDrawablePropertyColorFormat: kEAGLColorFormatRGBA8]
код взять снимок
func snapshotForEAGLView() -> UIImage {
//glFlush()
var width: GLint = 0, height: GLint = 0
let scale: CGFloat = UIScreen.mainScreen().scale
let prevGLContext = EAGLContext.currentContext()
glGetRenderbufferParameteriv(GLenum(GL_RENDERBUFFER), GLenum(GL_RENDERBUFFER_WIDTH), &width)
glGetRenderbufferParameteriv(GLenum(GL_RENDERBUFFER), GLenum(GL_RENDERBUFFER_HEIGHT), &height)
let dataLength = width * height * 4
let imageBytes = UnsafeMutablePointer<GLubyte>.alloc(Int(dataLength))
glPixelStorei(GLenum(GL_PACK_ALIGNMENT), 4)
glReadPixels(0, 0, GLsizei(width), GLsizei(height), GLenum(GL_RGBA), GLenum(GL_UNSIGNED_BYTE), imageBytes)
let dataProvider = CGDataProviderCreateWithData(nil, imageBytes, Int(dataLength), nil)
EAGLContext.setCurrentContext(prevGLContext)
let colorSpace = CGColorSpaceCreateDeviceRGB()
if let imageRef = CGImageCreate(Int(width), Int(height), 8, 32, Int(width) * 4, colorSpace, [CGBitmapInfo.ByteOrder32Big, CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedLast.rawValue)], dataProvider, nil, true, CGColorRenderingIntent.RenderingIntentDefault) {
return UIImage(CGImage: imageRef, scale: scale, orientation: .DownMirrored)
}
return UIImage()
}
В приложении мы AGSMapView
на два контроллера, позволяет сказать Controller1
и Controller2
, по нажатию кнопки на Controller1
, Controller2
выталкивается.
Мы принимаем скриншот на Controller2
, но иногда это занимает скриншот AGSMapView от Controller1
Это происходит случайно, есть ли способ, которым мы можем предоставить, какой вид взять скриншот или любым другим способом, чтобы избежать этого.
Любая помощь действительно ценится.