2010-11-23 108 views
0

在應用程序中,我需要從UIView中取出圖像。該視圖的框架爲W 1800和H 1200.performSelectorInBackground並執行UI操作

除非此活動完成,否則此活動需要大量時間和屏幕填充。

我需要在後臺執行此活動,以便用戶可以繼續其他事情。

什麼是達到此目的的最佳方法。我試過

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

但是應用程序崩潰,因爲它不允許用戶操作。如果我去的話

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

那裏的屏幕會出現,除非此活動完成。

我需要在後臺執行下列活動

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

    } 

請幫我在這。

謝謝。

+2

您需要輸入更多與您正在嘗試實現的內容相關的代碼 – 2010-11-23 07:04:26

+0

添加了更多代碼。 – 2010-11-23 07:14:03

回答

0

我認爲你的問題在於視圖的龐大規模 - 嘗試以這種方式操縱視圖尺寸的應用程序可能很有可能因爲使用太多內存而被操作系統殺死,尤其是在iOS 4下。 X。 UIViews曾經被限制爲1024x1024,原因很充分。

我建議尋找方法將問題分成可以處理而不需要太多內存的塊。