0

このコードを使用して、写真でアニメーションを作成しようとしています:

NSMutableArray *imageArray = [[NSMutableArray alloc] initWithCapacity:22];
int i;
for (i =1; i < 22; i++) {
    [imageArray addObject:[UIImage imageNamed:[NSString stringWithFormat:@"fbAnimation%d.png", i]]];
    //make it animate
    self.fbLogin.animationImages = [NSArray arrayWithArray:imageArray];
    self.fbLogin.animationDuration =0.8;
    self.fbLogin.animationRepeatCount = 5;
    [self.fbLogin startAnimating];
}
    int j;
    NSMutableArray *imageLoading = [[NSMutableArray alloc] initWithCapacity:4];
    for (j = 1; j < 4; j++) {
        [imageLoading addObject:[UIImage imageNamed:[NSString stringWithFormat:@"loading%d.png", j]]];

        //make it animate
        self.fbLogin.animationImages = [NSArray arrayWithArray:imageLoading];
        self.fbLogin.animationDuration = 1;
        self.fbLogin.animationRepeatCount = 5;
        [self.fbLogin startAnimating];
}

}

問題は、これまでに試したいずれの方法でも、画面上で実行されるアニメーションが 1 つだけであることです。Facebookからの他のすべてのデータの準備が整うまで、最初のアニメーションを実行し、次に2番目の「読み込み中...」を実行します。

4

1 に答える 1

1

まず、各ループを一周するたびに配列を呼び出し[self.fbLogin startAnimating]てリセットしています。それらをループの外に移動する必要があります。各アニメーションを 1 回だけ開始する必要があります。次に、2 番目の for ループは最初の for ループの直後に実行されるため、最初のアニメーションではなく 2 番目のアニメーションが表示されると予想されます。この問題を回避する 1 つの方法は、2 番目のアニメーションのコードを別のメソッドに配置し、最初のアニメーションが終了した後に呼び出されるように調整することです。animationImagesfor

[self performSelector:@selector(animation2) withObject:nil afterDelay:durationOfPreviousAnimation];

for最初のループの終わりに。これはアニメーション コードなので、メイン スレッド上にあることが保証されていると思います。

于 2013-02-17T01:41:28.403 に答える