Comment faire une capture d'écran pour l'set de l'écran, peu importe quelle application est la plus en avant dans iOS 7 (Jailbroken)

Avant iOS7 j'utilise la fonction UIGetScreenImage() pour prendre la capture d'écran facilement, mais dans iOS7, il devient obsolète, y a-t-il de bonnes methods pour l'archiver?

Addition: J'ai besoin de prendre une capture d'écran pour l'set de l'écran à n'importe quel sharepoint vue

Je suis tombé sur le même problème, mais je n'ai pas d'idées pour le résoudre.

J'ai essayé IOSurface – IOS Private API – capture d'écran en arrière – plan , qui fonctionne bien dans certaines applications, mais returnne un écran noir dans les jeux.

Puis j'ai essayé cette application https://github.com/k06a/UIView-FastScreenshot/blob/master/UIView%2BFastScreenshot.m , qui fonctionne bien en utilisant des apis privés, mais je ne peux pas le comstackr en utilisant theos, me disant toujours " Symboles indéfinis pour l'architecture armv7: CARenderServerRenderDisplay ". Edit: J'ai trouvé comment le comstackr en utilisant theos, mais returnne une image vide.

En outre, https://github.com/coolstar/RecordMyScreen fonctionne bien dans iOS7, mais il n'est pas open source maintenant, donc je ne peux pas savoir comment il capture tout l'écran.

Edit: le code de RecordMyScreen fonctionne sur iOS7 comme un tweak de tremplin , vous pouvez vous référer à ce file https://github.com/coolstar/RecordMyScreen/blob/master/RecordMyScreen/CSScreenRecorder.m cette méthode "- (void) _captureShot: (CMTime ) frameTime; "

Autre façon de replace UIGetScreenImage ()

 CGImageRef screen = UIGetScreenImage(); 

Le code ci-dessus est une ligne de code pour capturer l'écran, mais Apple n'ouvre pas l'API UIGetScreenImage () ci-dessus pour l'application publique. c'est-à-dire ne pas download vers Apple pour approbation. Ainsi, la manière alternative de capturer l'écran et de le sauvegarder est listée ci-dessous.

 - (void)captureAndSaveImage { // Capture screen here... and cut the appropriate size for saving and uploading UIGraphicsBeginImageContext(self.view.bounds.size); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); // crop the area you want CGRect rect; rect = CGRectMake(0, 10, 300, 300); // whatever you want CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], rect); UIImage *img = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); imageView.image = img; // show cropped image on the ImageView } // this is option to alert the image saving status - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { UIAlertView *alert; // Unable to save the image if (error) alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Unable to save image to Photo Album." delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil]; else // All is well alert = [[UIAlertView alloc] initWithTitle:@"Success" message:@"Image saved to Photo Album." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; [alert release]; } 

une partie du lien vous aide à légalement-replace-uigetscreenimage

 UIGraphicsBeginImageContext(self.view.bounds.size); [self.view renderInContext:UIGraphicsGetCurrentContext()]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 

Ce code peut vous aider à get une capture d'écran de la self.view qui est l'set de l'écran de l'iPhone, quelle que soit l'application en face. Si vous avez utilisé des calques dans votre vue, les calques ne seront pas inclus dans la capture d'écran et pour cela vous devez utiliser self.view.layer .

La class UIView a une méthode appelée: resizableSnapshotViewFromRect: afterScreenUpdates: withCapInsets.

Mais je n'ai jamais travaillé avec cette méthode, donc je ne peux pas vous en dire plus à ce sujet.

Et ce post: Capture UIView comme UIImage montre comment vous obtenez le UIView returnné dans une image.

J'espère que c'est utile.