2010-11-23 14 views
0

アプリケーションでは、UIViewからイメージを取り出す必要があります。そのビューのフレームはW 1800とH 1200です。performSelectorInBackgroundとUI操作の実行

このアクティビティは、このアクティビティが終了しない限り、時間がかかりすぎて画面が停止します。

このアクティビティをバックグラウンドで実行する必要があるため、ユーザーは他のことを続けることができます。

これを達成する最良の方法は何ですか?私は試しました

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

しかし、これでUI操作が許可されないため、アプリケーションがクラッシュします。この活動は、仕上げを取得しない限り、私は

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

が画面stucksで行く場合。

私はこれで私を助けてください背景

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

あなたが達成しようとしているものに関連するより多くのコードを入力する必要があります –

+0

コードが追加されました。 –

+0

「UIViewから画像を取り出す」?何?あなたの問題を示すためのコードはありますか? –

答えて

0

あなたの問題はビューの巨大なサイズにあります。このようなサイズのビューを操作しようとするアプリケーションは、おそらくOSによって、あまりにも多くのメモリを使用すると、特にiOS 4で殺される可能性が高いです。バツ。非常に良い理由からUIViewsは1024x1024に制限されていました。

問題を多くのメモリを必要とせずに処理できるチャンクに分割する方法を検討することをおすすめします。

+0

UIViewをサブクラス化し、代わりにCATiledLayerを返すように '+(CALayer *)layer'をオーバーライドします。 [CATiledLayerクラスリファレンス](http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CATiledLayer_class/Introduction/Introduction.html) –

+0

こんにちはアンドリュー、私にいくつかのスレッドを教えてくださいこのタイプの機能 –

関連する問題