【问题标题】:Detect Touch Event On UIScrollView's Content在 UIScrollView 的内容上检测触摸事件
【发布时间】:2014-09-28 02:17:26
【问题描述】:

我有一个 UIScrollview,里面有 UIImageView。

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

我想获取点击发生的 UIImageView。

我已经看到一些关于从 UIScrollView 获取触摸点然后根据位置计算 UIImageView 的答案 --- 但这似乎真的很混乱和矫枉过正。

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

【问题讨论】:

    标签: ios objective-c xcode uiscrollview uiimageview


    【解决方案1】:

    为了完整性。

    UIScrollView 内部的 UIImageView 没有被编程为原生接收触摸事件和手势。

    所以你可能想做的是:

    1. 将 UITapGestureRecognizer 添加到滚动视图以启用滚动视图内的触摸。

    >

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

    >

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

    >

    @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 {}
    

    @结束

    【讨论】:

    • 谢谢!我认为“singleTap.cancelsTouchesInView = NO;”是关键。
    【解决方案2】:

    您的UIImageViews 可能禁用了用户交互(这是他们的默认设置)。在每个图像视图上调用以下行,您的点击应该会被识别:

    yourImageView.userInteractionEnabled = YES; 
    

    请务必这样做before adding the gesture recognizer

    几周前我遇到了这个确切的问题,这就是为我解决的问题。

    【讨论】:

    • 宾果游戏!这正是我让它工作所需要的。现场谢谢!
    猜你喜欢
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 2011-10-01
    • 1970-01-01
    • 2013-06-25
    • 2013-03-23
    相关资源
    最近更新 更多