将触摸和手势转发到 UIScrollview 的视图

2024-02-28

我在转发手势和触摸时遇到一些问题。我玩了很多次,但我无法让它按照我想要的方式工作。

基本上我想用 2 个手指控制双屏幕上的滚动视图,并将其他所有内容转发到重叠滚动视图后面的 ipad 视图。

为了能够控制双屏上的滚动视图,我进行了子类化UIScrollView并将其添加为具有清晰背景的覆盖视图到 ipad 屏幕。

然后我将它与委托连接起来,将其拖动和内容转发到双屏上的滚动视图。这很有效。

正如我所写,我希望滚动视图只响应 2 个手指滚动,所以我将其设置为

ScrollView.panGestureRecognizer.minimumNumberOfTouches = 2;

但是滚动视图吞噬了所有触摸,除了两根手指触摸后面的视图之外,我无法正确转发其他所有内容。 我认为重写

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

必须做到这一点,但我无法正确检测屏幕上的手指数量。


我想分享/解释问题的解决方案。也就是说,我还想指出,帽翅雀的输入引导我走向了正确的方向。非常非常感谢你,伙计!

尝试将视图/滚动视图作为覆盖播放器时的问题是播放器不知道其“下一个响应者”。将视图/滚动视图作为底层视图将解决这个问题。 您可能需要微调该底层滚动视图中任何滚动视图的触摸行为以获得正确的行为(例如设置最大触摸次数)

解决方案是子类化 UIScrollview,重写此方法重写touchesBegan:和其他触摸方法如下 https://stackoverflow.com/questions/7439273/uiscrollview-prevents-touchesbegan-touchesmoved-touchesended-on-view-controlle(参见用户 1085093 的回答),并将其添加为 ipad 屏幕的基础视图。

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

// If not dragging, send event to next responder
if (!self.dragging){
    [self.nextResponder touchesBegan: touches withEvent:event];
}
else{
    [super touchesBegan: touches withEvent: event];
}}

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

// If not dragging, send event to next responder
if (!self.dragging){
    [self.nextResponder touchesMoved: touches withEvent:event];
}
else{
    [super touchesMoved: touches withEvent: event];
}}


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

// If not dragging, send event to next responder
if (!self.dragging){
    [self.nextResponder touchesEnded: touches withEvent:event];
}
else{
    [super touchesEnded: touches withEvent: event];
}}

我这样设置滚动视图:

 TopLayerScrollView *newScrollView = [[TopLayerScrollView alloc] init];
[newScrollView setBackgroundColor:[UIColor clearColor]];
[newScrollView setFrame:self.tabBarController.view.frame];
[newScrollView setContentSize:dualScreenViewController.scrollContent.contentSize];
newScrollView.showsHorizontalScrollIndicator = NO;
newScrollView.showsVerticalScrollIndicator = NO;
newScrollView.delegate = self;
newScrollView.bounces = NO;
[newScrollView scrollsToTop];
newScrollView.panGestureRecognizer.minimumNumberOfTouches = 2;

self.topLayerScrollView = newScrollView;
[newScrollView release];

[self.tabBarController.view removeFromSuperview];
[topLayerScrollView addSubview:self.tabBarController.view];
[window addSubview:topLayerScrollView];
[topLayerScrollView bringSubviewToFront:self.tabBarController.view];

底层scrollview的委托方法:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (scrollView.dragging || scrollView.tracking)
{
    [dualScreenViewControlleremphasized text.scrollContent setContentOffset:CGPointMake(scrollView.contentOffset.x, scrollView.contentOffset.y) animated:NO];
    self.tabBarController.view.frame = CGRectMake(scrollView.contentOffset.x, scrollView.contentOffset.y, self.tabBarController.view.frame.size.width, self.tabBarController.view.frame.size.height);
}}

这个解决方案效果很好。 另一个解决方案是按照我最初的意图将滚动视图作为覆盖视图。如前所述,问题是让 toplayer 视图了解其下面的视图(nextResponder)。要实现此目标,您必须子类化 UIScrollview 并创建一个 UIResponder 属性,您必须在界面生成器文件中或在运行时连接。这样覆盖的滚动视图就会知道谁是下一个响应者。请看晨星的回答 https://stackoverflow.com/questions/7439273/uiscrollview-prevents-touchesbegan-touchesmoved-touchesended-on-view-controlle

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

将触摸和手势转发到 UIScrollview 的视图 的相关文章

  • 用 UIView 像翻书一样翻页?

    我正在尝试在之间切换UIViews让它看起来就像你正在翻书的一页 The UIViewAnimationTransitionCurlUp如果我能让它向左或向右卷曲 那就非常接近了 这可能吗 我尝试过使用CATRansition但没有一种动画
  • 如何在 Apple Watch Extension/App 和 iOS App 之间建立通信通道

    我正在探索 WatchKit SDK 当我有 WatchKit 应用程序时 是否可以在 WatchKit 应用程序上从 iPhone 应用程序设置值 例如文本 设置 我可以从 iPhone 应用程序调用 WatchKit 应用程序扩展中的函
  • 为什么 Xcode 4 不会对我未完整实现 UITableViewDataSource 协议发出警告?

    如果我在 Xcode 中使用以下代码声明并不完全实现我自己的协议 一些协议 h protocol SomeProtocol
  • Swift 3:如何去除UITableView屏幕截图的灰色区域

    我在从桌面视图的屏幕截图中删除灰色区域时遇到了问题 这是我尝试截图时的输出UITableView 实际上我隐藏了一些tableViewCell这是不需要的 可能这就是区域显示灰色的原因 任何帮助表示赞赏 非常感谢 Answer 我通过使用
  • 自动布局、UIDynamics 和动画

    我对自动布局还很陌生 并且对如何为视图设置动画感到困惑 我读了很多 我知道你必须遵守限制 编辑它 然后包装layoutIfNeeded in an UIView动画块 但当真正要做的时候 我却有点失落 我很乐意有人能向我解释如何做这个动画
  • 如何检测Retina高清显示屏?

    UIScreen有一个新的 nativeScaleiOS 8 中的属性 但文档没有提及它 property nonatomic readonly CGFloat nativeScale 还有一个scale属性 但文档说它是 2 用于视网膜显
  • Objective Flickr 照片上传错误

    我正在使用 ObjectiveFlickr 库将照片从我的 iPhone 应用程序上传到 Flickr 我可以授权该应用程序并执行一般请求 但在尝试上传照片时遇到错误 要上传的照片是使用 AVFoundation 捕获的图像 这是相关代码
  • 确定 NSView 是否绘制的正确方法

    有没有正确的方法来确定是否NSView实际上是否在当前视图层次结构中绘制 考虑以下情况 视图完全在屏幕外 不是强制性的 该视图不在视图层次结构的顶部 The isHidden and isHiddenOrHasHiddenAncestor不
  • 使用 Cocoa 获取无法安装的驱动器列表

    我想获取在 OS X 下使用 Cocoa Objective C 无法安装 弹出的驱动器列表 我希望 NSWorkspace getFileSystemInfoForPath 能帮助我 NSArray listOfMedia NSWorks
  • 如何请求用户开启定位服务

    我需要我的应用程序来访问用户的当前位置 它在应用程序开始时检查用户是否已设置 如果没有 我需要应用程序显示提示以使其使用位置服务 就像警报视图一样 点击按钮 它应该会带您进入 iPhone 上的位置服务屏幕 您可以通过以下代码检查 loca
  • PresentModalViewController 不执行任何操作

    我有一个 UIViewController parent 调用presentModalViewController与另一个 UIViewController child on viewDidLoad If parent没有 UINaviga
  • 无法使用 Xamarin 和 WCF 访问 Web 服务

    我想使用 Xamarin 和 WCF 来使用公共 Web 服务 对于这个演示 我将使用Xamarin iOS 这是我试图使用的 公共 网络服务 http www webservicex net globalweather asmx WSDL
  • 避免“在此块中强烈捕获自身可能会导致保留周期”消息

    每次我必须在块内使用全局变量或属性时 如下所示 self save if isItSaving NO self saveMyFile 我必须像这样重写 BOOL iis isItSaving id myself self self save
  • 如何使用 Swift 获取 YouTube 频道的所有播放列表?

    我的问题不是关于从一般频道检索视频 我只想获取该频道创建的所有 播放列表 并检索每个播放列表的缩略图 标题和视频数量 这是一个 YouTube 频道示例 正如您所看到的 有很多已创建的播放列表 截至目前 我只能获取某个频道最新上传的视频 在
  • 线程 1:信号 SIGABRT - AppDelegate.h

    main m Journey Created by Julian Buscema on 2014 07 13 Copyright c 2014 Julian Buscema All rights reserved import
  • PrepareForSegue之谜

    我在两个不同的 VC 中有一个prepareForSegue 方法 一个使用一个if声明 而另一个旨在使用switch 除了名称之外 代码几乎相同 这个效果很好 void prepareForSegue UIStoryboardSegue
  • 如何将音乐从我的应用程序切换到 iPod

    我在用MusicPlayerController我的应用程序中的对象来播放音乐 我知道当 iPhone ipod 应用程序终止时 可以继续播放我的应用程序音乐 我该怎么做 这涉及到一些事情 您必须在两种音乐播放器之间进行选择 应用程序音乐播
  • 退出导航控制器

    我试图离开初始视图控制器 并进入空白视图控制器 这很好 但是这会使空白视图控制器也成为导航控制器的一部分 这不是我想要的 我想脱离视图控制器 在视图控制器中 我尝试退出 它会自行弹出 当我尝试视图中的方法时 将出现目标视图控制器 self
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • KeyboardAvoidingView - 隐藏键盘时重置高度

    我正在使用 React NativeKeyboardAvoidingView设置我的高度View当显示键盘时 但是当我关闭应用程序中的键盘时 视图的高度不会变回原来的值

随机推荐

  • Django 应用程序:没有名为“django.core.asgi”的模块

    从今天开始 我无法运行我的 Django 应用程序 因为存在导入错误 没有名为 django core asgi 的模块 您知道可能出现什么问题吗 信息 Manjaro python3 9 Django 版本 2 2 19 最终 0 我安装
  • 将 Spring 依赖项注入 ConstraintValidator

    我正在使用 Bean 验证 我有一个自定义验证器 MyValidator需要使用注入的 Spring 管理的 DAO 对象查找值 我怎样才能访问这个 Spring 没有将 DAO 注入到我的 MyValidator 对象中 Componen
  • “未知”和“无效”之间的区别

    根据这个答案 https stackoverflow com a 58885486 Using void相反意味着 forEach 承诺不使用返回值 因此可以使用返回任何值的回调来调用它 根据TypeScript 3 0 发行说明 http
  • C++ 中默认初始化的全局强类型枚举是什么?

    我试图确定全局强类型枚举初始化的默认值 下面的代码当然不能编译 include
  • Java JDBC 插入后检索 ID

    我使用触发器来设置所有表的 PK 列值 因此我不会对 java 中的 ID 进行任何操作 但我需要插入后的 ID 我怎样才能拿到身份证 stat execute INSERT INTO TPROJECT PROCESS GROUP NPRO
  • 如何将日期时间字符串转换为当前区域性日期时间字符串

    我有一个字符串 用美国英语文化表示 12 1 2011 我当前的机器文化是英国英语 格式为 dd mm yyyy 如何将 12 1 2011 转换为 1 12 2011 我尝试过以下格式 System DateTime Parse resu
  • 仅当行数低于限制时 Postgres 才插入行

    我希望在 Postgres 10 中有一个 SQL 语句或函数 允许我仅在行数少于一定数量的情况下插入行 select count from mytable where mykey 1 do the following only if th
  • 如何将 SQlite 中的数据显示到 iPhone 应用程序的表视图中

    我正在 Xcode 4 3 中使用 SQlite3 开发 iPhone 项目 SQlite 和 Xcode 之间的连接已完成 现在我想将我的数据显示到表视图 三个视图 中 并且它是只读的 所以我有主表视图 选择原始 gt 进入第二个视图并从
  • 使用 Vagrant 管理开发和生产环境?

    人们如何使用 vagrant 最好来自同一个 vagrantfile 处理开发 生产环境的简单自动化 使用 puppet 我试图解决的用例 如果没有创建的话 我很乐意用 vagrant 来启动生产机器 如果在我的开发环境的 puppet 文
  • 直到阈值为止的数字列表的总和

    我有一个整数列表 我想要对其进行求和 直到满足阈值 然后能够访问达到阈值的索引 就像是 summing lt function i sum sum list i index i while sum lt thresholdValue sum
  • HTML5 视频 - 设置 video.currentTime 会破坏播放器

    我正在尝试与 Chrome 中的第三方 html5 视频播放器进行交互 我能够因此获得对它的有效引用 document getElementsByTagName video 1 以及readyState是 4 所以一切都很好 我可以成功 并
  • Gradle - 排除配置的依赖关系,但不排除继承配置的依赖关系

    使用 Gradle 1 0 里程碑 8 我的项目使用 slf4j Logback 进行日志记录 因此我想防止 log4j 上的任何传递依赖项污染我的类路径 因此 我添加了全局排除 如下所示 configurations all exclud
  • 定义自定义颜色变量

    我想在我的代码中全局更改一些按钮颜色 我似乎无法找到一种定义颜色变量然后为该变量分配颜色值的方法 我试过这个 颜色 SelectedColor new Color f1 setBackgroundColor Color rgb 0 0 10
  • C# 以编程方式执行 TNSPing

    是否可以以编程方式在 Oracle 数据库上执行 TNSPing 我知道我可能可以调用 TNSPing 程序并解析生成的任何输出 但我正在寻找一种更强大的方法来处理数据库 TNS Ping 看过了平级 http msdn microsoft
  • 为什么 String 的 format(Object...args) 定义为静态方法?

    我想知道为什么Java5 及以上版本提供了使用 String 类中的静态方法的 printf 样式格式化程序 如下所示 public static String format String format Object args 代替 pub
  • 如何在 ASP.Net 应用程序上使用 salting+hashing?

    我正在从头开始构建一个项目 并且我想以正确的方式做事 我在网上读过有关哈希的内容 这基本上就是将密码转换为 64 个字母的繁文缛节 对吗 腌制怎么样 我的问题是 如何使用 C 对字符串进行哈希处理 MSSQL 中的字段声明类型是什么 nva
  • MVC HTML5 电子邮件标签

    我有一个模型 Required ErrorMessage Email required DataType DataType EmailAddress ErrorMessage Please enter valid email address
  • PowerPoint VBA 中的睡眠/等待计时器不是 CPU 密集型的

    我目前正在制作一个 PowerPoint 演示文稿 该演示文稿在计算机上用作某种信息亭或信息屏幕 它从磁盘上的文本文件中读取文本 该文本文件中的文本显示在 PowerPoint 的文本框中 并且每 5 秒刷新一次 这样我们就可以编辑 Pow
  • 从查询引用子表单

    在 MS Access 2010 中 我有一个查询 它在条件中引用了以下内容 Forms frm Add Item Subform ActiveControl Caption 这使我可以在查询中使用按钮的 标题 文本 以下代码位于 Butt
  • 将触摸和手势转发到 UIScrollview 的视图

    我在转发手势和触摸时遇到一些问题 我玩了很多次 但我无法让它按照我想要的方式工作 基本上我想用 2 个手指控制双屏幕上的滚动视图 并将其他所有内容转发到重叠滚动视图后面的 ipad 视图 为了能够控制双屏上的滚动视图 我进行了子类化UISc