0

Grand Central Dispatchを使用しUIViewて、を画像としてキャプチャするタスクをキューに入れています。キューで実行されている画像キャプチャにかなりの時間がかかることを除いて、これですべてが正常に機能しています。

これをスピードアップしたり、私のテクニックを向上させる方法はありますか?これは、画像をキャプチャして拡大縮小するためのコードですUIImageView。画像は、表示用にの画像に設定されます。

(void)captureScrollViewImageForLayoverView
{
    // capture big map image
    CGSize size = mainView.bounds.size;
    UIGraphicsBeginImageContext(size);
    [[mainView layer] renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    // scale map
    size = myLocationOverlay.bounds.size;
    UIGraphicsBeginImageContext(size);
    [newImage drawInRect:CGRectMake(0,0,size.width,size.height)];
    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    myLocationOverlay.imageMap.image = scaledImage;
}

そして、これがタスクをキューに入れているコードです。

...
mapImageDrawQueue = dispatch_queue_create("mapImage.drawQueue", NULL);

(void)captureScrollViewImageForLayoverViewWrapper {
    // multithreaded approach to draw map
    dispatch_async(mapImageDrawQueue, ^{ [self captureScrollViewImageForLayoverView]; });
}
4

1 に答える 1

0

私はあなたが言及したのと同じ問題で私のアプリのキューに画像をロードしていました。公式のプログラミングガイドをチェックしましたが、呼び出した直後にキューが実行されることを保証できないと書かれていることを思い出しました。だから私はNSThreadを使って仕事をしました、そしてそれはうまく機能しています:

NSThread* myThread = [[NSThread alloc] initWithTarget:self
                                        selector:@selector(captureScrollViewImageForLayoverView)
                                        object:nil];
[myThread start];

次の行を関数captureScrollViewImageForLayoverViewに追加することを忘れないでください。

上:NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 最後:[pool release];

詳細については、このドキュメントを確認してください-スレッドプログラミングガイド お役に立てば幸いです。

于 2012-06-21T10:46:05.780 に答える