通过循环为几个UIImageViews分配一个TouchUpInside事件,使用一个处理程序方法可以进一步动画/操作每个UIImageView

时间:2011-08-08 17:49:28

标签: iphone objective-c ios cocoa-touch uiimageview

我已经遍历NSArray的NSDictionary对象,其中包含要显示的多个图像的数据。然后将此数据转换为UIImageView对象,并将其作为子视图添加到当前视图中。很简单!通过数组/字典传入的所有图像都会根据需要显示在屏幕上,到目前为止效果很好:

for (NSDictionary *caseData in caseImages) { // caseImages is the array
    UIImage *caseImage = [UIImage imageNamed:[caseData objectForKey:@"image_file"]];
    UIImageView *caseView = [[UIImageView alloc] initWithImage:caseImage];
    caseView.frame = CGRectMake([[caseData objectForKey:@"position_x"] intValue], [[caseData objectForKey:@"position_y"] intValue], [[caseData objectForKey:@"size_w"] intValue], [[caseData objectForKey:@"size_h"] intValue]);
    [self.view addSubview:caseView ];
}

但是,现在我需要更进一步,并实现一个touchUpInside事件处理程序,如果可能的话,可以附加到每个UIImageView对象,这样处理程序方法可以进一步动画/操作每个UIImageView,理想情况下,居中和放大所触摸的图像,并简单地将其余图像淡出。

我遇到的问题是如何成功添加触摸事件,能够引用案例触及的图像,以及其他未触摸的图像(如果可能),然后将适当的过渡动画应用于每个分别是图像。

我见过类似下面代码段的示例,但我无法使其正常工作:

[caseView addTarget:self action:@selector(spotlightCase) forControlEvents:UIControlEventTouchUpInside];

虽然,如果我实际上已经开始工作了,我仍然觉得如何成功地引用从循环中创建的每个UIImageView,所以每个图像都可以根据其进行适当的动画/操作。一个确实被感动了。我是否需要在视图控制器中使用一个新的数组属性来保存添加到视图中的每个UIImageView对象的指针?这些甚至都不能用UIImageViews完成吗?我看到有人提到使用自定义UIButton对象,但我认为这可能同样复杂/不可见,因为我还需要动画图像的大小和位置。

您是否有机会了解如何实施上述所有棘手的工作?

谢谢!

2 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是将UIButton添加到视图控制器的每个图像的视图中,并将backgroundImage属性设置为循环内的[UIImage imageNamed:]。您可以将通用选择器设置为每个按钮的目标,就像在第二个代码段中一样。我之前使用过类似的技巧,并设置按钮的tag属性来标识按下的按钮的索引。如果你还在@selector(spotlightCase:)的末尾添加冒号,你的方法也会传递调用它的对象的id。您的方法定义是:

- (void) spotlightCase:(id) sender;

您可以使用sender.tag来控制逻辑。

希望这有帮助

戴夫

答案 1 :(得分:0)

尝试将值设置为caseImage.tag并使用它来识别已触摸的图像。