2010-11-23 102 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,原因很充分。

我建议寻找方法将问题分成可以处理而不需要太多内存的块。