我有一个名为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
}
}
答案 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