在动画期间选择图像

时间:2015-05-26 23:20:19

标签: ios objective-c

我有一个名为myImage的插座,用于设置动画为5张图像的imageView。有了Tap Gesture Recognizer,我想让用户点击正确的图像,因为它会快速传递到下一个级别。

我的代码出错,但这不起作用:

- (void)viewDidLoad {
  [super viewDidLoad];

  self.myImage.animationImages =
    [NSArray arrayWithObjects:
      [UIImage imageNamed:@"examplePic1.png"],
      [UIImage imageNamed:@"examplePic2.png"],
      [UIImage imageNamed:@"correctPic.png"],
      [UIImage imageNamed:@"examplePic4.png"],                                 
      [UIImage imageNamed:@"examplePic5.png"],
      nil];

  [self.myImage setAnimationRepeatCount:0];
  self.myImage.animationDuration = 1;
  [self.myImage startAnimating];
}

- (IBAction)TapGestureRecognizer:(id)sender {
  if (self.myImage.image = [UIImage imageNamed:@"correctPic.png"]) {
    // Launch next level
  }
  else {
    // Vibrate Device and subtract points from score
  }
}

2 个答案:

答案 0 :(得分:1)

您的代码中存在关于对象和相等性的基本误解。我假设您在"=="方法中表示TapGestureRecognizer。但是,即使您将=更改为==,也无法提供您想要的内容。

这样的表达式
[UIImage imageNamed:@"examplePic1.png"]

调用UIImage的类方法,该方法创建一个新的UIImage对象。您已创建其中5个对象,将它们放入数组中,将UIImage对象的animationImage数组设置为这些图像。这些对象都是来自myView.image:的所有不同对象我可以告诉,因为我可以从您的代码中看到您已为animationObjects array分配了5个新对象。您的==测试无法正常运行,因为您正在将self.image与全新的UIImage对象进行比较。

您要做的是确定用户触摸的图像。 UIImageView中没有方法可以告诉您当前正在显示哪个动画UIImage。您假设视图的图像属性将随着动画图像的显示而改变,但没有理由认为这个假设是正确的:文档中肯定没有说明。即使您更正了代码(通过执行此类操作):

if(self.image == [self.animationImages objectAtIndex:2]){

}

您的代码不正确。

如果我想做你想做的事,我会用UIImageView作为subview创建一个UIView,每个都有自己的gesture recognizer。我会使用每个subview的frame属性来制作动画。

答案 1 :(得分:0)

看起来选项是根据动画的startTime确定“应该”显示哪个图像。

Determine which of its animationImages a UIImageView is displaying?

或者,只需使用计时器设置当前显示的图像。

Detect which image was clicked in UIImageView with animationImages