如何将UIScrollView的触摸事件发送到其后面的视图?

2024-03-28

我在另一个视图之上有一个透明的 UIScrollView 。

滚动视图有内容 - 文本和图像,用于显示信息。

它后面的视图有一些用户应该能够点击的图像。 并且它们上面的内容可以使用提到的滚动视图进行滚动。

我希望能够正常使用滚动视图(尽管没有缩放),但是当该滚动视图实际上并未滚动以让点击事件传递到其后面的视图时。

使用触摸和滚动事件的组合,我可以确定何时让点击通过。 但其背后的视图仍然没有接收到它们。

我尝试过对所有触摸事件使用类似的东西:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    NSLog(@"touchesBegan %@", (_isScrolling ? @"YES" : @"NO"));

    if(!_isScrolling) 
    {
        NSLog(@"sending");
        [self.viewBehind touchesBegan:touches withEvent:event];
    }
}

但它不起作用。

同样就我而言,鉴于我拥有的用例,我无法真正应用 hitTest 和 pointInside 解决方案。


首先UIScrollViews只是本能地认识到UIPanGestureRecognizers and UIPinchGestureRecognizer所以你需要添加一个UITapGestureRecognizer to the UIScrollView因此它也可以识别任何点击手势:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];

// To prevent the pan gesture of the UIScrollView from swallowing up the
// touch event
tap.cancelsTouchesInView = NO;

[scrollView addGestureRecognizer:tap];

然后,一旦您收到点击手势并且handleTap:动作被触发,你可以使用locationInView:检测点击手势的位置实际上是否在滚动视图下方的图像之一的框架内,例如:

- (void)handleTap:(UITapGestureRecognizer *)recognizer {

    // First get the tap gesture recognizers's location in the entire 
    // view's window
    CGPoint tapPoint = [recognizer locationInView:self.view];

    // Then see if it falls within one of your below images' frames
    for (UIImageView* image in relevantImages) {

        // If the image's coordinate system isn't already equivalent to
        // self.view, convert it so it has the same coordinate system
        // as the tap.
        CGRect imageFrameInSuperview = [image.superview convertRect:image toView:self.view]

        // If the tap in fact lies inside the image bounds, 
        // perform the appropriate action.
        if (CGRectContainsPoint(imageFrameInSuperview, tapPoint)) {
            // Perhaps call a method here to react to the image tap
            [self reactToImageTap:image];
            break;
        }
    }
}

这样,上述代码仅在识别到点击手势时执行,如果点击位置落在图像内,则您的程序仅对滚动视图上的点击做出反应;否则,你可以滚动你的UIScrollView照常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将UIScrollView的触摸事件发送到其后面的视图? 的相关文章

  • 如何在IOS中使用“*”字符进行呼叫(拨号)?

    我希望用 字符来调用 例如 gt 711313 目前 我正在使用这段代码 NSString str NSString stringWithFormat tel tmp UIApplication sharedApplication open
  • 使用 MKPolyline 在地图上绘制用户路线

    我对 Objective c 还很陌生 在我的应用程序中 我试图将用户采取的路线绘制到地图上 到目前为止 这是我仅获取用户当前位置的内容 import StartCycleViewController h import CrumbPath
  • 如何声明仅调试语句

    在 C 中 我可以使用以下代码来获得仅在调试构建期间执行的代码 我如何在 Xcode 中执行相同的操作 if DEBUG etc etc endif 您可以使用 ifdef DEBUG endif 你需要添加DEBUG 1到调试配置设置中项
  • Phonegap - cordova 在 Android 和 iOS 设备上延迟且缓慢

    我刚刚开始使用 zend studio 开始我的第一个 PhoneGap 项目 但是 在我构建并部署它之后 该应用程序非常慢 Android 和 iOS 均可 滚动滞后 如果我按下按钮 转到下一页的速度很慢 有什么办法可以提高它的性能吗 提
  • 数组扩展以按值删除对象

    extension Array func removeObject
  • 如何使 collectionViewCell 仅按高度自动调整大小?

    我使用collectionView的自动调整流布局的功能 self flow UICollectionViewFlowLayout alloc init self flow scrollDirection UICollectionViewS
  • 为什么每次用户启动应用程序时都要注册推送通知?

    在Apple文档中你可以找到下面这句话 应用程序应在每次启动时进行注册 并向其提供者提供当前令牌 它调用 registerForRemoteNotificationTypes 来启动注册过程 因此 当我在应用程序中实现推送通知时 我必须注册
  • 锁定时 AVAudioPlayer 在 iPhone 5 中不播放音频

    使用 AVAudioPlayer 我尝试在 iphone 播放器播放时播放声音 当设备锁定时也是如此 问题是 在 iPhone 4s ios 7 中 效果很好 但在带有 6 和 7 ios 的 iPhone 5 上没有任何反应 In the
  • 如何在UIWindow中添加视图?

    我想添加一个视图UIWindow与以下代码 AppDelegate delegate AppDelegate UIApplication sharedApplication delegate UIWindow window delegate
  • 如何让我的“点击”功能与 iOS 配合使用

    我有一组充当按钮的 Div 这些按钮有一个简单的 jquery click 函数 该函数适用于除 iOS 之外的所有浏览器 例如 div class button click me div and button click function
  • iPhone X 上横向的 UICollectionView

    当 iPhone X 横向使用时 您应该检查 safeAreaInsets 以在左侧和右侧制作适当大的装订线 UITableView 有新的insetsContentViewsToSafeArea属性 默认 true 自动将单元格内容保留在
  • iOS图片上的线测量

    我需要一些帮助来开始绘制末端带有圆圈的线条 并测量其长度 我能够划清界限 但无法让它移动 花了几个小时决定在 SO 上发布 因此 请参阅下图并指导我开始 任何使用 Objective C 的示例或教程都会有帮助 谢谢 这个想法看起来实现起来
  • 如何在 Swift 中更改 UIButton 图像

    我正在尝试使用 Swift 更改 UIButton 的图像 我应该怎么办 这是 OBJ C 代码 但我不知道 Swift 的情况 playButton setImage UIImage imageNamed play png forStat
  • 使用 popToRootViewController 时我丢失了导航栏

    我有一个 iOS 应用程序 其中主屏幕是 UICollectionViewController 从集合视图中选择项目时 视图将推送到该项目的详细信息视图 在细节视图中 我构建了一个从侧面移出的抽屉 滑块 为了让视图看起来像我想要的那样 我隐
  • 使用本地化故事板进行即时本地化

    我正在开发一个应用程序 它有一个切换按钮可以在英语和阿拉伯语之间切换 并且应该是动态的 我正在使用该方法https github com maximbilan ios language manager https github com ma
  • 电话号码的 Swift 2 国家/地区代码

    我正在尝试从 iPhone 用户处获取国家 地区代码 我不确定是否有有关该国家 地区以及某些应用程序 如 Viber 如何建议拨号代码的信息 我到目前为止 let currentLocale NSLocale currentLocale l
  • ObjC 中的 self 是什么?我应该什么时候使用它?

    什么是self在 Objective C 中是什么意思 我应该何时何地使用它 是否类似于this在Java中 self指的是您正在使用的当前类的实例 是的 它类似于this在爪哇 如果您想对该类的当前实例执行操作 则可以使用它 例如 如果您
  • 如何在 iOS 中通过 wifi 传输大文件

    我下载了WiTap http developer apple com library ios samplecode WiTap Introduction Intro html代码来自苹果网站 它用于通过本地 WiFi 网络传输数据 我正在从
  • ios - ARKit - 如何创建旋转对象手势功能?

    我是 ARKit 新手 我想创建一个旋转对象的函数 这是我关于拖动和旋转对象的代码 Rotate object objc func rotateRecognized sender UIPanGestureRecognizer let sce
  • 从另一个选项卡重新加载 UITableView

    我在尝试重新加载时遇到问题UITableView从 XML 源加载的单元格数据 这是场景 应用程序包含选项卡 其中一个选项卡中有一个表格视图 它从 XML 文件获取数据并且工作正常 但问题是当我想要更改提要类别并从另一个选项卡更改 XML

随机推荐