1

イメージビューに 2 秒間隔で画像を表示する必要があります。ただし、最後の画像のみを表示するこのコード

NSUInteger i,j;
for (i = 1; i <= kNumImages; i++)
{
    NSURL *picUrl=[NSURL URLWithString:[NSString stringWithFormat:@"http://panagtakdo.com/misc/images/%d.jpg",i]];
    NSData *picData=[[NSData alloc] initWithContentsOfURL:picUrl];
    image1.image = [UIImage imageWithData:picData];
    NSLog(@"Image %d Success",i);
    [NSThread sleepForTimeInterval:0.2];    
}
4

3 に答える 3

1

説明するために、コードが機能しない理由:

画像を設定した直後にスレッドがスリープ状態になっています。画像ビューを再描画する時間はありません (新しい画像が表示されます)。したがって、すべてのループが実行された後、最初の再描画が行われます。したがって、最後の画像のみが表示されます。

Travis と mhunturk の回答を組み合わせると、その方法について完璧な解決策が得られます。ただし、非同期メソッドを使用して、URL から画像を読み込むこともお勧めします。

メイン UI スレッドをブロックしないでください。sleepForTimeInterval を直接呼び出すことも、Web コンテンツを同期的にロードすることもありません。

于 2012-04-17T16:19:34.283 に答える
1

まず、そんなことをしてはいけません。最初に NSMutableArray *imageData; を作成します。

initWithContentsOfURL すべての画像;

imageData の数が kNumImages に等しい場合、それを imageView にリンクします。NSThread sleepForTimeInterval を使用する代わりに、 performSelector: afterDelay 関数を使用して画像を変更できます。

于 2012-04-17T12:57:34.413 に答える
0

アニメーション化された一連の画像を表示したい場合は、それを実行するUIImageを作成できます。

NSMutableArray *mImageArray = [NSMutableArray arrayWithCapacity:0];
for(int i = 1; i < 9; i++) {
    NSString *imageFileName = [NSString stringWithFormat:@"0%d.tiff",i];
    UIImage *newImage = [UIImage imageNamed:imageFileName];
    [mImageArray addObject:newImage];
}

UIImage *animatedSequence = [UIImage animatedImageWithImages:mImageArray duration:16];

UIImageView *uiiv = [[UIImageView alloc] initWithImage:animatedSequence];
[self.canvas addSubview:uiiv];

UIImageの継続時間を設定することにより、画像のタイミングを制御できます。シーケンスで8つの画像を使用したため、期間を16秒に設定しました。これは2秒/画像になります。

(これをiOSシミュレーターでテストし、うまく機能しました)

私のプロジェクト構造のPS、self.canvasはメインのUIViewを指します

于 2012-04-17T15:55:36.607 に答える