观察 UITableView 中的捏合多点触控手势

2023-12-01

我正在寻找在 UITableView 之上实现捏入/捏出,我已经研究了几种方法,包括这个:

类似问题

但是虽然我可以创建一个UIViewTouch对象并将其覆盖到我的 UITableView 上,滚动事件不会转发到我的 UITableView,我仍然可以选择单元格,并且它们通过触发到新 ViewController 对象的转换来正确响应。但尽管传递了touchesBegan、touchesMoved 和touchesEnded 事件,我仍无法滚动UITableView。


这似乎是一个经典问题。就我而言,我想通过 UIWebView 拦截一些无法子类化的事件,等等。

我发现最好的方法是使用 UIWindow 拦截事件:

事件拦截窗口.h

@protocol EventInterceptWindowDelegate
- (BOOL)interceptEvent:(UIEvent *)event; // return YES if event handled
@end


@interface EventInterceptWindow : UIWindow {
    // It would appear that using the variable name 'delegate' in any UI Kit
    // subclass is a really bad idea because it can occlude the same name in a
    // superclass and silently break things like autorotation.
    id <EventInterceptWindowDelegate> eventInterceptDelegate;
}

@property(nonatomic, assign)
    id <EventInterceptWindowDelegate> eventInterceptDelegate;

@end

事件拦截窗口.m:

#import "EventInterceptWindow.h"

@implementation EventInterceptWindow

@synthesize eventInterceptDelegate;

- (void)sendEvent:(UIEvent *)event {
    if ([eventInterceptDelegate interceptEvent:event] == NO)
        [super sendEvent:event];
}

@end

创建该类,将 MainWindow.xib 中的 UIWindow 类更改为 EventInterceptWindow,然后在某处将 eventInterceptDelegate 设置为要拦截事件的视图控制器。拦截双击的示例:

- (BOOL)interceptEvent:(UIEvent *)event {
    NSSet *touches = [event allTouches];
    UITouch *oneTouch = [touches anyObject];
    UIView *touchView = [oneTouch view];
    //  NSLog(@"tap count = %d", [oneTouch tapCount]);
    // check for taps on the web view which really end up being dispatched to
    // a scroll view
    if (touchView && [touchView isDescendantOfView:webView]
            && touches && oneTouch.phase == UITouchPhaseBegan) {
        if ([oneTouch tapCount] == 2) {
            [self toggleScreenDecorations];
            return YES;
        }
    }   
    return NO;
}

相关信息在这里:http://iphoneincubator.com/blog/windows-views/360idev-iphone-developers-conference-presentation

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

观察 UITableView 中的捏合多点触控手势 的相关文章

随机推荐

  • 从 sqlite 存储和检索 Uri

    我是一名新手开发人员 目前正在开发一个应用程序 其中部分功能允许用户捕获图像 将其存储在应用程序的文件系统中 并将其引用存储在 SQLite 数据库的列中 然后 用户将能够根据与数据库中关联的任何标准在网格视图中查看这些图像 例如 仅显示特
  • 如何使用 python 3.8.1 将 django 应用程序部署到heroku?

    我正在尝试将 django 应用程序部署到 heroku 安装 django heroku 时出现错误 越来越失败了错误是 从源代码构建 psycopg2 需要 pg config 我也尝试安装psycopg2 它也失败了 我使用的是 Ma
  • 触发电子邮件验证

    我正在使用自定义策略 期望的用户旅程是 用户在屏幕 1 上输入电子邮件 密码 成功验证屏幕 1 后 用户将转到屏幕 2 在屏幕 2 中 用户必须输入发送到其电子邮件的代码 请注意 用户在注册时已经验证了电子邮件 我被困在让 2 人去工作 目
  • PayPal 免费试用期的实施不会返回任何自定义参数

    最近两天一直被这个问题困扰 Scenario 我们有一个基于网络的产品 用户可以免费注册 14 天 之后每月订阅 60 美元 一旦用户点击 使用 Paypal 付款 按钮 页面将把用户带到 Paypal 一旦他们完成付款 它就会重定向回我们
  • 如何在不禁用firewalld(Kubernetes)的情况下使用Flannel

    我是法兰绒和 K8s 的新手 我正在我的 1 个主节点和 2 个节点集群 由 KVM 创建 上使用它们 我使用 flannel 网络插件初始化了集群 然后我发现我无法访问内部 结果发现可能是我的网络或者DNS进程出了问题 下列的https
  • 具有继承列表的自动映射器

    仅供参考 这与这个问题不同自动映射器以及从集合或列表继承 这是我继承的列表 public class MyPagedList
  • 在模拟器中使用 Google 登录按钮时出现问题

    当我单击 Google 登录按钮时 它会显示以下对话框 我单击 更新 但没有任何反应 但我的 logcat 给出了以下输出 01 24 07 38 48 121 W GooglePlayServicesUtil 1305 Google Pl
  • 日期时间差异

    我有2个变量 GMDCOMTM which stores the date time Tue Oct 1 13 32 40 2013 GMDRRSTM which stores the date time Tue Oct 2 23 35 3
  • 值参数的常量正确性

    我知道关于 const 正确性的问题很少 其中指出函数的声明及其定义不需要就值参数达成一致 这是因为值参数的常量仅在函数内部重要 这可以 header int func int i cpp int func const int i retu
  • [Passportjs][Angular5] 请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问原点“null”

    我正在尝试将 Nodejs 后端 api 与 Angular 集成 我在后端应用程序上实施了 passpor google passport github passport twitter 策略 我的后端应用程序网址是http localh
  • 成形的 iframe 可能吗?

    是否可以使用六边形 菱形或长方形或正方形以外的任何形状的 iframe 或者甚至可能是一个 div 你可以用 CSS mask 来伪造它 但它的一部分会被它遮盖 你不能使iframe将其内容呈现在这些形状之一内
  • 如何在 shell 脚本中对整数比较进行逻辑或运算?

    我正在尝试进行简单的条件检查 但似乎不起作用 If 等于0或大于1然后打个招呼 我尝试过以下语法但没有成功 if 0 o gt 1 then echo hello fi if 0 gt 1 then echo hello fi 这应该有效
  • Stream 的复用是否是流的副本

    例如 有一个带密钥的流 val keyedStream KeyedStream event Key env addSource keyBy several transformations on the same stream keyedSt
  • 无法理解输出的原因

    我正在运行一个代码片段 但我无法理解代码及其产生的输出 include
  • 使用 HTTPS 的 HttpGet:SSLPeerUnverifiedException

    Using Http客户端 当我尝试通过 HTTPS 进行通信时收到以下错误 线程 main 中出现异常 javax net ssl SSLPeerUnverifiedException 对等点未经过身份验证 这是我的代码 URI logi
  • javafx,如何实现confirmHandler?

    我正在使用 javafx 的网络引擎来显示网页 在页面上 有一个脚本调用window confirm 我已经知道如何设置确认处理程序以及如何显示类似模式的对话框 我的问题是如何在处理程序返回之前获得用户的选择 webEngine setCo
  • JSF 2:ajax 调用后页面重定向

    我陷入了类似的导航案例问题this一 简而言之 我正在尝试使用 ajax 渲染将导航从一个页面重定向到另一个页面h commandLink 这是支持 bean ManagedBean public class StartBean publi
  • OffscreenCanvas 无法克隆,因为它已分离

    昨天又回到了我对 HTML canvas 的爱好 并尝试在单独的线程中进行渲染 只是在控制台中面临以下错误 未捕获的 DOMException 无法在 Worker 上执行 postMessage 无法克隆 OffscreenCanvas
  • AppStore语言描述和“本地化原生开发区域”

    一款以三种语言 英语 意大利语和西班牙语 本地化的 iPhone 应用程序已提交至 AppStore 并附有三种语言的说明和屏幕截图 结果是 在 AppStore USA 中有英语描述 在 AppStore Spain 有西班牙语描述 在
  • 观察 UITableView 中的捏合多点触控手势

    我正在寻找在 UITableView 之上实现捏入 捏出 我已经研究了几种方法 包括这个 类似问题 但是虽然我可以创建一个UIViewTouch对象并将其覆盖到我的 UITableView 上 滚动事件不会转发到我的 UITableView