2012-06-26 53 views
2

在我的iPhone應用程序中,我捕獲設備的屏幕快照。在屏幕截圖視圖中,我有不同的層次結構視圖,底部是空白背景視圖,然後是背景圖片視圖,圖片視圖是EAGLView。我想用EAGLView的幀大小捕獲設備的屏幕截圖,它應該包含imageview和背景視圖。這裏是我的代碼:UIView和iOs背景下的屏幕截圖

- (IBAction)captureScreen:(id)sender{ 

    UIGraphicsBeginImageContext(self.view.bounds.size); 

    [self.cameraAppView.layer renderInContext:UIGraphicsGetCurrentContext()]; // cameraAppView is the EAGLView 

    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    CGImageRef imageRef = CGImageCreateWithImageInRect([viewImage CGImage], cameraAppView.frame); 

    UIImage *img = [UIImage imageWithCGImage:imageRef]; 

    CGImageRelease(imageRef); 
} 

但現在我只得到EAGLView的屏幕截圖,我想通過EAGLView幀大小的設備的屏幕截圖。我怎樣才能做到這一點?

編輯

對不起,我錯過了我的問題點。在同一屏幕上還有一些其他子視圖。但他們都是EAGLView的頂部。我想捕獲視圖的圖像,在EAGLView下面包括EAGLView內容。

回答

1

最後自己找到了答案。這是一個棘手的問題,我不確定是否有其他適當的方式來做到這一點。爲了我的需要,它完美地工作。我所做的只是隱藏子視圖,這些子視圖不應包含在屏幕截圖中,並且一旦捕獲圖像就取消隱藏子視圖。

如果有人發現任何人找到正確的方法來做到這一點,請分享。

0

指定你想要捕捉的,而不是

[self.cameraAppView.layer renderInContext:UIGraphicsGetCurrentContext()]; 

使用

[self.cameraAppView.superView.superView.layer renderInContext:UIGraphicsGetCurrentContext()]; 

如果您EAGLView是您的ImageView的子視圖這是你想要的視圖的子視圖這將工作的看法捕獲

+0

EAGLView是視圖的子視圖,ImageView也是視圖的子視圖。但它的層次排列就像EAGLView在頂部,在中間和底部視圖中的運行視圖。 – Mithuzz

+0

如果我改變你說的代碼,它等於self.view.layer吧?但在這種情況下,我從該視圖中獲取所有子視圖。我很抱歉,我錯過了一個問題,請檢查最新的一個。 – Mithuzz