0

我们可以为 a 指定 images 数组UIImageview,它会很好地为图像设置动画。我已经对这个类进行了子UIImageView类化。

现在,当用户单击图像时,我捕获了点击手势,但问题是我如何知道单击了动画图像中的哪个图像?

- (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

你试过self.image吗?它应该具有当前图像。

我希望您需要设计自己的自定义动画视图来处理。您可以将图像视图添加到视图并定期更新。

于 2012-10-12T11:31:31.197 回答
0

您想要做的事情很困难但并非不可能,并且会使用调试器对您进行一些调查。您需要找到在动画期间在您的每张图像上调用的某种方法。您可能会发现创建一个小型演示项目确实对此有所帮助 - 一个仅包含一些动画图像的单一视图项目。

我不知道的是动画运行后,是所有内容都缓存了,还是在显示之前发送了单个图像。可能会可靠地调用某些方法。

所以你需要创建一个断点并让它记录一些东西,或者编写一个 UIImage 的子类。您正在寻找的是一种在每个图像上调用的方法。例如,“drawInRect”或“CGImage”。一旦你发现这样的方法在整个动画中被调用,你的问题就解决了。

然后,您将子类化 UIImage,并为每个图像提供一个标记属性和一个委托(使用您编写的新协议),并且当每个图像获得该绘制调用(或 CGImage 调用)时,它将通知委托它将很快就会呈现。

当您点击时,图像将是最后一个注册它提供其 CGImage 的图像,或者它已准备好绘制。

于 2012-10-12T16:52:45.250 回答
0

我想您可以使用 [gesture locationInView:self] 捕获手势的位置。如果您还可以捕获动画的经过时间,您可以准确计算点击时屏幕上的哪些图像以及点击落在哪个可见图像上。

于 2012-10-12T16:59:16.107 回答