2016-06-10 23 views
0

使用下面的代碼的快照採取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兩個控制器,可以說Controller1Controller2,按鈕的點擊Controller1Controller2推。

我們正在採取的Controller2截圖,但有時它需要AGSMapView的截圖來自Controller1

它是隨機發生的,是有其合理把握截圖或任何其他方式來避免這種情況的任何方式,使我們可以提供。

任何幫助,非常感謝,很多。

回答

0

drawViewHierarchyInRect

工作,感謝每一個

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;