0

UIimageview をアニメーション化する必要があります。アニメーションを開始すると、長い時間が経過すると発生し、さまざまな画像ビューの連続アニメーション時にどこかでメモリがリークすることがわかりました。私がする必要があるのは、スクロール ビューに n 個の UIview があり、各ビューにカスタム ボタンがあることだけです。そのボタンが選択されるとアニメーションが発生し、アニメーションが進行中の場合、ユーザーがボタンをタップするとアニメーションが続行され、再度開始する必要はありません

ここに私のコードがあります

 for (int i=0; i<AlphabetArray.count; i++) {

    UIView *view=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 300, 200)];
    view.backgroundColor=[UIColor grayColor];
    view.tag=i+1;
    [self.scrollView addSubview:view];
     UIImageView *image=[[UIImageView alloc]initWithFrame:CGRectMake(200, 50, 400, 400)];


    [image setImage:[[animationArray objectAtIndex:i]objectAtIndex:0]];
    image.tag=i+1;
    [view addSubview:image];

    UIButton *animatebutton=[[UIButton alloc]initWithFrame:CGRectMake(200, 50, 336, 310)];
    animatebutton.tag=i+1;
    [animatebutton addTarget:self action:@selector(makeAnimation:) forControlEvents:UIControlEventTouchUpInside];
    //[animatebutton setImage:[UIImage imageNamed:@"NewtDance_mov_0.png"] forState:UIControlStateNormal];
    [view addSubview:animatebutton];
}

-(void)makeAnimation:(UIImageView *)sender {

UIView *tagView=(UIView *)[self.view viewWithTag:sender.tag];



for (UIImageView * imageview in [tagView subviews]) {

    NSLog(@"Yes %d",imageview.tag);


    if ([imageview isKindOfClass:[UIImageView class]]) {

        if ([imageview isAnimating]) {
            NSLog(@"Animation Happens");

        }

        else{
            imageview.animationDuration=3.0;

            imageview.animationImages=[animationArray objectAtIndex:sender.tag-1];
            imageview.animationRepeatCount=2;
            imageview.tag=sender.tag;
            [imageview startAnimating];
        }
    }

}



NSLog(@"OK");


}

このコードを使用すると、私の要件を達成できます。しかし、for-in ループが使用されているため、アニメーションの開始が非常に遅くなります。

4

1 に答える 1

5

これを処理する最良の方法。UIImageViewanimationImagesプロパティを使用します。

  1. NSMutableArray画像のオブジェクトを使用してオブジェクトを作成しますUIImage
  2. Images 配列をUIImageView animationImagesプロパティに設定します。
    [imageView setAnimationImages:imagesArray]

  3. [imageView startAnimating]アニメーションを開始します。

  4. [imageView stopAnimating]アニメーションを停止します。
    詳細については、ドキュメントを確認してください。

詳しくは、こちらをご確認ください。.

于 2013-02-22T11:02:25.490 に答える