performSelectorInBackground并执行UI操作

时间:2010-11-23 06:59:48

标签: iphone

在应用程序中,我需要从UIView中取出Image。该视图的框架是W 1800和H 1200。

除非此活动完成,否则此活动需要花费大量时间和屏幕卡住。

我需要在后台执行此活动,以便用户可以继续处理其他事情。

实现这一目标的最佳方法是什么?我试过

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

但是应用程序会崩溃,因为它不允许使用UI操作。如果我一起去

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

    }

请帮我解决这个问题。

感谢。

1 个答案:

答案 0 :(得分:0)

我认为你的问题在于视图的大小 - 一个试图以这种方式操纵这个大小的视图的应用程序很可能被操作系统因使用太多内存而被杀死,特别是在iOS 4.x下。 UIViews曾经被限制在1024x1024,这是有充分理由的。

我建议你研究一下将问题分成几块的方法,这些方法可以在不需要太多内存的情况下进行处理。