0

こんにちは、画像を画面にすばやくロードする際に問題が発生しています。初めてビューにアクセスしたときに遅延があるようです:

画像を読み込む方法は次のとおりです。

for (int i = 1; i < 19; i++)
{
    UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%@_Hole%d_", courseName, i]];
    imageView = [[UIImageView alloc] initWithImage:image];
    frame.origin.x = cx;
    imageView.frame = frame;
    [scrollView addSubview:imageView];
    cx += scrollView.frame.size.width;
    imageView = nil;
}

各画像は 640 x 820 です。

4

4 に答える 4

2

他の人が指摘しているように、画像処理の基本的な問題、つまりデバイスの有限 I/O 速度に直面しています。

ちなみに、imagedNamed:画像を内部的にキャッシュしているため、後続の読み込みが高速である理由はおそらくこれで説明できます。

タイリングがオプションでない場合 (@Krio が推奨するように)、ビューが必要になる前に、バックグラウンド スレッドで画像をキャッシュにプリロードしてみてください。たとえば、このビューが別のビューから頻繁にアクセスされる場合、以前のビューがロードされたときに、 または でimageNamed:ラップされた一連の呼び出しを開始できます。ただし、これは特定の一連の状況でのみ役立ちます。dispatch_asyncNSOperationQueue

- ほとんどの場合、次に要求される UI 要素は画像ビューであることがわかっています。

-ロードするアセットが事前にわかっている。

-画像のセットが十分に小さいため、すべてのメモリをいっぱいにすることはできません。フレームワークは、いっぱいになったばかりのキャッシュを追い出さなければなりません。

これにより、アプリケーションの設計がかなり複雑になることにも注意してください。絶対に必要でない限り、避けるべきです。

于 2012-04-04T16:11:46.837 に答える
0

はい、画像の読み込みには時間がかかります。大きな画像がたくさんあるので、期待通りの結果になります。スクロールビューにUIImagesを追加するのではなく、タイルレイヤーについて考えてみてください。CATiledLayerはあなたを助けるかもしれません

于 2012-04-04T15:48:18.753 に答える
0

これをスピードアップするために他にできることはあまりないと思います。

ただし、プロセスをある程度高速化できるメモリ管理の問題があります。

for (int i = 1; i < 19; i++)     {
     UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%@_Hole%d_", courseName, i]];
     imageView = [[UIImageView alloc] initWithImage:image];
     frame.origin.x = cx;
     imageView.frame = frame;
     [scrollView addSubview:imageView];
     cx += scrollView.frame.size.width;
     [imageView release];
 } 
于 2012-04-04T15:46:46.207 に答える
0

こんにちは、画像の読み込みで UI がフリーズします。UI がフリーズしないように、このタスクをバックグラウンドで実行できます。以下のコードを試してください。

  -(void)loadImages{
        [self performSelectorInBackground:@selector(loadImagesInBackGround) withObject:nil];
   } 

  -(void)loadImagesInBackGround{

        for (int i = 1; i < 19; i++)
  {
        UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%@_Hole%d_", courseName, i]];
       imageView = [[UIImageView alloc] initWithImage:image];
       frame.origin.x = cx;
       imageView.frame = frame;
       [scrollView addSubview:imageView];
       cx += scrollView.frame.size.width;
       imageView = nil;
  }

}

画像をロードする場所から loadImages: を呼び出す必要があります。または、Grand Central Dipatch (GCD) を試して、バックグラウンドで画像を読み込むこともできます。

于 2012-04-04T16:25:25.723 に答える