2010-11-23 11 views
0

In der Anwendung muss ich Bild aus UIView nehmen. Rahmen dieser Ansicht ist W 1800 und H 1200.performSelectorInBackground und Ausführen der UI-Operation

Diese Aktivität nimmt viel Zeit und Bildschirm bleibt dort, es sei denn diese Aktivität wird beendet.

Ich muss diese Aktivität im Hintergrund ausführen, damit der Benutzer mit anderen Dingen fortfahren kann.

Was ist der beste Ansatz, um dies zu erreichen. Ich habe versucht mit

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg 

Aber Anwendung wird abstürzen, wie es nicht erlaubt UI-Betrieb mit diesem. Wenn ich mit

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait 

Bildschirm stucks es sei denn, diese Tätigkeit gehen bekommen Finish.

brauche ich folgende Aktivität im Hintergrund mich

-(void) PrepareImageData 
{ 
    UIImage* frontViewImage = [self PreparefrontImage:[self GetSavedFrontImage]]; 
    [self SaveImageinDocumentWithName:frontViewImage FileName:@"frontview.png"]; 

    UIImage* rearViewImage = [self PrepareBackImage:[self GetSavedBackImage]];; 
    [self SaveImageinDocumentWithName:rearViewImage FileName:@"backview.png"]; 
} 
    -(UIImage*) GetSavedBackImage 
    { 
     UIImage* background; 
     UIImage* messageTextview; 
     UIImage* toTextView; 
     UIImage* fromTextView; 

     background  = [self GetImageFromView:self toRect:self.frame]; 

     CGRect rect = CGRectMake(0, 0, 1800, 1200); 
     UIGraphicsBeginImageContext(rect.size); 
     CGPoint backgroundPoint = CGPointMake(0,0); 
     [background drawAtPoint:backgroundPoint]; 
     UIImage* backImage = UIGraphicsGetImageFromCurrentImageContex(); 
     UIGraphicsEndImageContext(); 

     return backImage; 
    } 

    - (UIImage *) GetImageFromView:(UIView *)aView toRect:(CGRect)aRect 
    { 
     CGSize pageSize = aRect.size; 
     UIGraphicsBeginImageContext(pageSize); 
     [aView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
     UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
     return image; 

    } 

Bitte helfen auf diese auszuführen.

Danke.

+2

Sie müssen mehr Code eingeben, der sich darauf bezieht, was genau Sie erreichen möchten. –

+0

Weitere Codes hinzugefügt. –

+0

"Bild aus UIView entfernen"? Was? Haben Sie einen Code, um Ihr Problem zu demonstrieren? –

Antwort

0

Ich denke, Ihr Problem liegt in der schieren Größe der Ansicht - eine App, die versucht, eine Ansicht dieser Größe auf diese Weise zu manipulieren, wird wahrscheinlich vom Betriebssystem für zu viel Speicher getötet, besonders unter iOS 4. x. Früher waren UIViews aus einem sehr guten Grund auf 1024x1024 beschränkt.

Ich würde empfehlen, Wege zu suchen, das Problem in Stücke aufzuteilen, die verarbeitet werden können, ohne so viel Speicher zu benötigen.

+0

Wie Unterklasse UIView und überschreiben '+ (CALayer *) Schicht, um stattdessen eine CATiledLayer zurückzugeben. [CATiledLayer Klassenreferenz] (http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CATiledLayer_class/Introduction/Introduction.html) –

+0

Hallo Andrew, kannst du mir bitte ein paar Threads geben, um zu erreichen diese Art von Funktionalität. –

Verwandte Themen