2016-11-29 2 views
0

Mon application est utilisé de grandes images (5MB) pour baliser. Mais l'application est écrasée sans aucun message d'erreur. Voici le code jeApp accidents dans drawViewHierarchyInRect

 UIGraphicsBeginImageContext(CGSizeMake(_drawingUV.drawingImgView.image.size.width, _drawingUV.drawingImgView.image.size.height)); 
     { 
       CGContextRef context = UIGraphicsGetCurrentContext(); 

      if ([_drawingUV.drawingImgView respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) 
      { 
       [_drawingUV.drawingImgView drawViewHierarchyInRect:_drawingUV.drawingImgView.bounds afterScreenUpdates:YES]; 
      } 
      else 
      { 
       [_drawingUV.drawingImgView.layer renderInContext:context]; 
      } 
      screenShot = UIGraphicsGetImageFromCurrentImageContext(); 
     } 
     UIGraphicsEndImageContext(); 

J'ai essayé toutes les possibilités de trouver une solution deux derniers jours. Mais ne put pas.

Cette fonction est utilisée sous les objets de l'interface utilisateur. la vue principale a vue et à l'intérieur qu'elle a UIScrollView et à l'intérieur que UIScrollView a UIImageView. Donc j'ai besoin d'avoir une photo d'écran avec UIImageView. J'utilise ces vues pour faire défiler et baliser la vue de l'image. Une idée pour ce crash?

+0

Avez-vous essayé d'enlever les accolades externes « {..} »? Aussi, avez-vous vraiment besoin de supporter 'renderInContext' (iOS 6 et ci-dessous)? – norders

+0

Oui. J'ai essayé. renderInContext peut être supprimé. cette imageview peut être défilée et l'image Height = 6000 et Width = 6000+. –

Répondre

0

-je utiliser tout le temps sans problème:

- (UIImage *)screenshot { 
    UIWindow *mainWindow = [[UIApplication sharedApplication] keyWindow]; 

    UIGraphicsBeginImageContextWithOptions(mainWindow.bounds.size, NO, 1.0); 
    [mainWindow drawViewHierarchyInRect:mainWindow.bounds afterScreenUpdates:NO]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return image; 
} 
+0

Vous allez recevoir la capture d'écran de l'écran principal. Je veux obtenir une capture d'écran de l'image. Et cette vue d'image peut être défilée et l'image Height = 6000 et Width = 6000+. –

+0

Je l'ai testé avec un UIImageView 6000x6000 et il fonctionne très bien sur le simulateur. Gardez à l'esprit que la mémoire requise pour stocker une image 6Kx6K est de 144 Mo. Le moniteur d'utilisation de la mémoire de Xcode a atteint un niveau supérieur à 1 Go pendant le rendu de la hiérarchie de la vue. – norders