2016-06-10 2 views
0

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.

Antwort

0

drawViewHierarchyInRect

gearbeitet, dank jeder

let size = CGSizeMake(viewWidth, viewHeight) 

    UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.mainScreen().scale) 

    let rec = CGRectMake(0, 0, viewWidth, viewHeight) 
    self.agsMapView.drawViewHierarchyInRect(rec, afterScreenUpdates: true) 

    let image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return image;