0

の画像配列を指定するUIImageviewと、画像が非常にうまくアニメーション化されます。クラスをサブクラス化しましたUIImageView

ユーザーが画像をクリックすると、タップ ジェスチャがキャプチャされますが、問題は、animationImages のどの画像がクリックされたかを知る方法です。

- (void)setup
{
    self.animationImages = self.bannerImagesArray;
    self.animationDuration = 3.0f;
    self.animationRepeatCount = 0;
    [self startAnimating];

    self.userInteractionEnabled = YES;
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageClicked)];
    [self addGestureRecognizer:tapGesture];
}

- (void)imageClicked
{
    NSLog(@"Image clicked");
    // How do i detect which image was clicked here
}
4

4 に答える 4

3

次の回避策を使用しました...の組み込み機能を使用する代わりに、animationImagesカスタムで画像をアニメーション化しましたNSTimer

- (void)setBannerImagesArray:(NSArray *)bannerImagesArray
{
    _bannerImagesArray = bannerImagesArray;
    [self.timer invalidate];
    self.currentImageIndex = 0;
    self.image = [self.bannerImagesArray objectAtIndex:self.currentImageIndex];
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1
                                                  target:self
                                                selector:@selector(displayNextImage)
                                                userInfo:nil
                                                 repeats:YES];

}

- (void)setup
{
    self.userInteractionEnabled = YES;
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageClicked)];
    [self addGestureRecognizer:tapGesture];

    self.bannerImagesArray = nil;
}

- (void)imageClicked
{
    NSLog(@"Image clicked index: %d", self.currentImageIndex);    
}

- (void)displayNextImage
{
    self.currentImageIndex = (self.currentImageIndex + 1) % self.bannerImagesArray.count;
    NSLog(@"Current Image Index %d", self.currentImageIndex);
    self.image = [self.bannerImagesArray objectAtIndex:self.currentImageIndex];
}
于 2012-10-14T13:57:24.793 に答える
0

[gesture locationInView:self] でジェスチャの位置をトラップできると思います。アニメーションの経過時間もキャプチャできれば、タップ時に画面に表示されていた画像と、タップが着地した可視画像を正確に計算できます。

于 2012-10-12T16:59:16.107 に答える
0

あなたがやりたいことは難しいですが、不可能ではありません。デバッガーを使用して調査する必要があります。見つける必要があるのは、アニメーション中に各画像で呼び出されるメソッドです。小さなデモ プロジェクトを作成すると、アニメーション化されるいくつかの画像だけを含む単一のビュー プロジェクトを作成するのに非常に役立つ場合があります。

私が知らないのは、アニメーションの実行後、すべてがキャッシュされているか、表示前に個々の画像がメッセージで送信されているかです。おそらく、いくつかのメソッドが確実に呼び出されます。

したがって、ブレークポイントを作成して何かをログに記録させるか、UIImage のサブクラスを作成する必要があります。探しているのは、各画像で呼び出されるメソッドです。たとえば、「drawInRect」や「CGImage」などです。アニメーション全体でそのようなメソッドが呼び出されていることがわかったら、問題は解決します。

次に、UIImage をサブクラス化し、各画像にタグ プロパティとデリゲート (作成した新しいプロトコルを使用) を与えます。各画像がその描画呼び出し (または CGImage 呼び出し) を取得すると、次のことをデリゲートに通知します。まもなくレンダリングされます。

タップを取得すると、画像は、CGImage を提供していた、または描画する準備ができていた、登録された最後の画像になります。

于 2012-10-12T16:52:45.250 に答える
0

self.image を試しましたか?現在のイメージが含まれている必要があります。

処理する独自のカスタム animationView を設計する必要があることを願っています。ビューにイメージビューを追加して、定期的に更新することができます。

于 2012-10-12T11:31:31.197 に答える