在UIScrollView的内容上检测触摸事件

时间:2014-09-28 02:17:27

标签: ios objective-c xcode uiscrollview uiimageview

我有一个UIScrollview,里面有UIImageView。

如果我在添加到滚动视图之前向UIImageView添加手势,则不会触发触摸事件。

我想让UIImageView在点击时出现。

我已经看到了一些有关从UIScrollView获取触摸点然后根据位置计算UIImageView的答案 - 但这看起来非常混乱和过度杀伤。

是否有一种简单的方法可以从UIScrollView中的对象获取触摸事件?

2 个答案:

答案 0 :(得分:5)

为了完整起见。

UIScrollView内部的UIImageView未编程为本机接收触摸事件和手势。

所以你可能想做的是:

  1. 将UITapGestureRecognizer添加到滚动视图,以便在滚动视图内启用触摸。
  2. >

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
    
    singleTap.cancelsTouchesInView = NO; 
    
    [myScrollView addGestureRecognizer:singleTap]; 
    
    1. 使用从UIImageView继承的视图自定义UIImageView。
    2. >

      CustomImageView *imageView = [[CustomImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
      [imageView setUserInteractionEnabled:YES];
      [scrollView addSubview:imageView];
      
      1. 在该自定义子类中提供触摸方法并将其添加到UIScrollView ..
      2. >

        @interface CustomImageView:UIImageView {}

        @implementation CustomImageView

        - (id)initWithFrame:(CGRect)frame{}
        
        - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {}
        
        - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {}
        
        - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {}
        

        @end

答案 1 :(得分:1)

您的UIImageView可能禁用了用户互动(这是他们默认使用的)。在每个图像视图上调用以下行,并且应该识别您的点击:

yourImageView.userInteractionEnabled = YES; 

请务必执行此操作before adding the gesture recognizer

几个星期前我就遇到了这个问题,这就是为我解决的问题。