2012-01-12 11 views
0

私はテーブルビューを持っていて、行をクリックすると別のビューにナビゲートします。ナビゲーション部分のコードを以下に示します。別のビューへの移動 - pushViewController

ShowImageController *showImageController = [[HowItWorksViewController alloc] initWithNibName:nil bundle:nil]; 

[self.navigationController pushViewController:showImageController animated:YES]; 

他のビューには画像が含まれていますが、私はその画像をそのviewDidLoadに追加しました。そのコードはここにあります

UIImageView *imageView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"hello.png"]]; 
    [imageView setFrame:CGRectMake(o, o, 200, 300)]; 

[[self view] addSubview:imageView ]; 

問題があります。私が行をクリックすると、他の画面に移動するのに時間がかかります(非常に遅い)。

注:他のビューに画像がない行は、問題なくうまくナビゲートされました。なぜこうなった ?どのように私はそれを修正することができますか?

+3

これは画像のサイズによるものかもしれません.. viewWillAppearで同じコードを試してください – Ali3n

+0

画像のサイズは15kbです – Illep

+0

15kbはあまりにも大きいとは聞こえませんが、それ以外の問題は他にはありませんあなたが見ているもの。私の答えで自分のコードを試してみてください。 – mattjgalloway

答えて

0

画像が大きくて読み込みに時間がかかるようです。小さな画像を使用するか、画像を制御できない場合は、バックグラウンドで画像をロードしてみてください。ここでは、バックグラウンドでのロードを始めるためにいくつかのコードは次のとおりです。

あなたは、このように使用することができます
- (void)decodeImageInBackgroundThread:(UIImage*)decodedImage forImageView:(UIImageView*)imageView { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ 
     CGImageRef originalImage = [decodedImage CGImage]; 

     CFDataRef imageData = CGDataProviderCopyData(CGImageGetDataProvider(originalImage)); 
     CGDataProviderRef imageDataProvider = CGDataProviderCreateWithCFData(imageData); 

     if (imageData != NULL) { 
      CFRelease(imageData); 
     } 

     CGImageRef image = CGImageCreate(CGImageGetWidth(originalImage), 
             CGImageGetHeight(originalImage), 
             CGImageGetBitsPerComponent(originalImage), 
             CGImageGetBitsPerPixel(originalImage), 
             CGImageGetBytesPerRow(originalImage), 
             CGImageGetColorSpace(originalImage), 
             CGImageGetBitmapInfo(originalImage), 
             imageDataProvider, 
             CGImageGetDecode(originalImage), 
             CGImageGetShouldInterpolate(originalImage), 
             CGImageGetRenderingIntent(originalImage)); 

     if (imageDataProvider != NULL) { 
      CGDataProviderRelease(imageDataProvider); 
     } 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      [imageView setImage:[UIImage imageWithCGImage:image]]; 
      CGImageRelease(image); 
     }); 
    }); 
} 

- (void)viewDidLoad { 
    ... 

    UIImage *image = [UIImage imageNamed:@"hello.png"]; 

    UIImageView *imageView = [[UIImageView alloc] initWithImage:nil]; 
    [imageView setFrame:CGRectMake(0.0f, 0.0f, 200.0f, 300.0f)]; 
    [[self view] addSubview:imageView]; 

    [self decodeImageInBackgroundThread:image forImageView:imageView]; 
} 
+0

それはパラメータが少なく、 '(DISPATCH_QUEUE_PRIORITY_LOW) 'を指しています。どのようにこれを解決するための任意のアイデア? – Illep

+0

これを修正するために編集されました。 – mattjgalloway

0

がasynkタスクまたはnsoperationqueueで画像をロードしてください:)

関連する問題