folgenden Code Snapshot AGSMapViewTaking snapshot von AGSMapView
Dieser Code zu ergreifen, um die kEAGLDrawablePropertyRetainedBacking Eigenschaft, sein erforderlichen sonst wird es weiß Snapshot erstellen.
let layer = self.AgsMapView.layer as! CAEAGLLayer
layer.drawableProperties = [
kEAGLDrawablePropertyRetainedBacking: NSNumber(int: 1), kEAGLDrawablePropertyColorFormat: kEAGLColorFormatRGBA8]
-Code Snapshot
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()
}
In App nehmen wir haben AGSMapView
auf zwei Controller, sagen wir Controller1
und Controller2
, auf Klick-Taste auf Controller1
wird Controller2
geschoben.
Wir nehmen Screenshot auf Controller2
, aber irgendwann kommt es Screenshot von AGSMapView von Controller1
Es zufällig auftritt, ist es eine Möglichkeit, in der wir die Screenshot oder andere Art und Weise nehmen sehen bieten, dies zu vermeiden.
Jede Hilfe wirklich sehr dankbar, danke.