2016-11-29 25 views
0

Meine App wird große Bilder (5 MB) verwendet, um zu markieren. Aber die App wird abgestürzt ohne irgendwelche Fehlermeldungen. Unten ist der Code, den ichApp stürzt in drawViewHierarchyInRect

verwendet
 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(); 

Ich habe alle Möglichkeiten versucht, eine Lösung letzten zwei Tage zu finden. Aber konnte nicht.

Diese Funktion wird unter den UI-Objekten verwendet. Hauptansicht hat Ansicht und innerhalb, dass es UIScrollView und innerhalb hat UIScrollView UIImageView. Also muss ich diese UIImageView screenshot bekommen. Ich benutze diese Ansichten, um die Bildansicht zu scrollen und zu markieren. Irgendeine Idee für diesen Unfall?

+0

Haben Sie versucht, die äußeren Klammern „{..}“ zu entfernen? Müssen Sie wirklich 'renderInContext' (iOS 6 und niedriger) unterstützen? – norders

+0

Ja. Ich habe es versucht. renderInContext kann entfernt werden. Diese Bildansicht kann scrollbar gemacht werden und Bildhöhe = 6000 und Breite = 6000+. –

Antwort

0

Ich benutze dies die ganze Zeit ohne Frage:

- (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

Hier erhalten Sie den Hauptbildschirm Screenshot. Ich möchte einen Bildansicht-Screenshot erhalten. Und diese Bildansicht kann scrollbar gemacht werden und Bildhöhe = 6000 und Breite = 6000+. –

+0

Ich habe es mit einem UIImageView 6000x6000 getestet und es funktioniert gut auf dem Simulator. Denken Sie daran, dass der Speicher, der zum Speichern eines 6Kx6K-Bilds benötigt wird, 144 MB beträgt. Der Speicherverbrauchs-Monitor von Xcode erreichte bei der Wiedergabe der Ansichtshierarchie einen Spitzenwert von über 1 GB. – norders