检测UIImageView上的触碰事件

时间:2012-01-23 18:13:20

标签: iphone

我在UIView上放置了4个UIImageView并将其命名为

UIImageView myImg1 = [[UIImageView alloc] init];     
UIImageView myImg2 = [[UIImageView alloc] init];     
UIImageView myImg3 = [[UIImageView alloc] init]; 
UIImageView myImg4 = [[UIImageView alloc] init];

如何告诉编译器我刚刚触及UIImageView 1或UIImaveView 2.如果我只能使用UIImageView执行此任务,而不是按钮。请指导我这个问题。感谢

4 个答案:

答案 0 :(得分:6)

时尚的解决方案是使用 UIGestureRecognizer 对象:

loadView 方法中的

(或编码 UIImageView (s)绘图的任何地方...):

   UITapGestureRecognizer *tapRecognizer;
    UIImageView *anImageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 100, 100)];
    [anImageView setTag:0]; //Pay attention here!, Tag is used to distinguish between your UIImageView on the selector
    [anImageView setBackgroundColor:[UIColor redColor]];
    [anImageView setUserInteractionEnabled:TRUE];
    tapRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewDidTapped:)] autorelease];
    tapRecognizer.numberOfTapsRequired = 1;
    [anImageView addGestureRecognizer:tapRecognizer];
    [contentView addSubview:anImageView];
    [anImageView release];

    UIImageView *anotherImageView = [[UIImageView alloc] initWithFrame:CGRectMake(80, 180, 100, 100)];
    [anotherImageView setTag:1]; //Pay attention here!, Tag is used to distinguish between your UIImageView on the selector
    [anotherImageView setBackgroundColor:[UIColor greenColor]];
    [anotherImageView setUserInteractionEnabled:TRUE];
    tapRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewDidTapped:)] autorelease];
    tapRecognizer.numberOfTapsRequired = 1;
    [anotherImageView addGestureRecognizer:tapRecognizer];
    [contentView addSubview:anotherImageView];
    [anotherImageView release];

这是一个简单的 imageViewDidTapped:示例方法,可用于区分上面的两个示例 UIImageView 对象:

- (void)imageViewDidTapped:(UIGestureRecognizer *)aGesture {
    UITapGestureRecognizer *tapGesture = (UITapGestureRecognizer *)aGesture;

    UIImageView *tappedImageView = (UIImageView *)[tapGesture view];

    switch (tappedImageView.tag) {
        case 0:
            NSLog(@"UIImageView 1 was tapped");
            break;
        case 1:
            NSLog(@"UIImageView 2 was tapped");
            break;
        default:
            break;
    }
}

答案 1 :(得分:1)

您应该考虑使用tag属性。为每个图像添加唯一的tag,然后使用此信息确定触摸的图像。例如,通过

设置标签
UIImageView myImg1 = [[UIImageView alloc] init];     
myImg1.tag = 1;

当您收到img的触摸时,请致电

img.tag

检索标记。

答案 2 :(得分:1)

UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
        singleFingerTap.numberOfTapsRequired = 1;
        [myImg1 addGestureRecognizer:singleFingerTap];
        [myImg2 addGestureRecognizer:singleFingerTap];
        [singleFingerTap release];

动作方法

-(void)handleSingleTap:(UIGestureRecognizer*)sender{
    //your code here
}

答案 3 :(得分:1)

你可以这样做。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

        UITouch *touch = [touches anyObject];

       CGPoint touchLocation = [touch locationInView:self.view];
   if(CGRectContainsPoint(myImg1.view.frame,touchLocation))
 {
NSLog(@" Image 1");
}
else if(CGRectCont..

注意......如果该点位于多个图像视图中,则会输出NSLog .. 在那种情况下..检查哪个图像视图位于顶部..