问题标签 [uievent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - When using hitTest:withEvent method - decide if tap was initiated
I'm trying to override hitTest:withEvent in a custom view. This is a container view with many subviews.
Attached to this "superView" is a gesture recognizer. On top of this view sit many subviews (which in turn have more and more subviews) I decided to over ride hitTesh:withEvent in order to decide which view should get the events - and in which cases the superview should get the event in order to trigger the gesture.
Problem I am having is that hitTest will return the superview in cases where a tap gesture would be initialized in a subview. In that case I would like to "retroactively" disregard the tap action - and again "invoke" hitTest:withEvent on the superview. the superview could then decide to pass the "true" responder to this event.
How can I do it:
Example:
ios - 取消手势识别器后以编程方式启动 hitTest:WithEvent 并返回不同的 UIView 以响应事件
我要优先hitTest:withEvent
返回自我(最底部的视图)-
返回时self
- 我的视图将响应触摸事件依次启动手势识别器。
如果取消手势或发生某些情况 - 我想手动启动hitTest:withEvent
然后返回不同的视图来处理发生的相同事件/触摸序列。这是必要的,因为手势识别器仅在hitTest:withEvent
返回手势视图并且其状态更改为后才会启动began
。
我不知道该怎么做 - 我考虑过手动调用我的子视图
但我没有事件参数(手势收到它)
ios - remoteControlReceivedWithEvent 中的 Nil 值
我有一个主从应用程序。点击导航中的tableView
每个单元格,您可以下载和播放音频文件。我在保持实例单一时遇到了问题,因此来自多个单元的不同文件不会同时播放。在修复它之前,我的工作正常,我可以管理所有视图控制器上的事件。MasterViewController
DetailViewController
AVAudioPlayer
remoteControlReceivedWithEvent
现在解决这个问题,我的播放器同时只播放一个文件,所以如果我碰巧导航回MasterViewController
然后选择另一行并输入不同的单元格并开始播放,它将停止第一个文件并开始第二个文件. 但目前的问题是,当用户在其他地方时尝试使用控制中心,在 , 之外的地方DetailViewController
被remoteControlReceivedWithEvent
调用,但值为nil
,所以什么也没有发生。此时我可以检测到我现在正在播放哪一行,cellForRowAtIndexPath:
并在下面突出显示它MasterViewController
:
但是我无法发现这一点,remoteControlReceivedWithEvent
因为我无法访问索引。
我已经包含canBecomeFirstResponder
等等,我确信这只是table view
理解当前正在播放哪个文件的混乱。如果我在另一个 VC 中尝试这个DetailViewController
但不在它之外,甚至在后台尝试,一切都很好。
在我的AudioManager
课堂上:
我应该markAsNowPlaying
手动还是有一个委托方法可以用来发现正确的索引并避免获取nil
?
ios - 如何让 UIView 停止接收触摸事件?
我正在开发一个应用程序,希望用户快速触摸和滑动多个 UIViews,一旦用户的手指到达它,每个 UIViews 都应该执行一个动作。我有很多视图,所以典型的事情是,我会遍历每个视图以查看触摸是否在其范围内,这是不行的 - 延迟太多了。有没有其他方法可以将触摸事件从一个视图传递到另一个视图(即在第一个视图旁边)?我想也许有一些方法可以取消触摸事件,但我已经搜索过了,到目前为止都是空的。
我遇到的一个大问题是,如果我在我的视图控制器中实现我的触摸处理,touchesBegan 只会在第一次触摸时触发——如果用户触摸了某个东西,然后在不移动第一根手指的情况下点击了其他东西,那么该点击是未记录在 touchesBegan 或 touchesMoved 中。但是,如果我在 UIViews 本身中实现我的触摸处理,一旦视图注册触摸,如果用户没有抬起手指并移动它,第一个视图周围的视图不会注册触摸。只有当用户抬起手指然后放回手指时,周围的视图才会记录触摸。
所以我的问题是,假设我有两个并排的视图,我的触摸处理代码在视图中实现,我将手指放在视图 1 上。然后我将手指滑到视图 2 - 我需要做什么如何让视图 2 注册该触摸,该触摸从视图 1 开始并且从未“结束”?
ios - 跟踪触摸事件而不覆盖 UIWindow 和 UIApplication 中的发送事件方法
我正在尝试为现有代码库的新模块实现会话管理,其中main.m
,Appdelegate
和UIApplication
文件捆绑在一个库中,我们无权修改它。
我尝试通过将手势识别器添加到UIWindow
跟踪触摸事件的方法中,但通常的按钮触摸事件行为不端。
现在我计划子类化UIView
和覆盖触摸开始并点击测试方法并使我所有的UIView
类都实现这个自定义UIView
类。
除了上述方法之外,我们还有什么更好的方法来跟踪触摸事件吗?
ios - iOS:如何使一个视图控制器反映另一个视图控制器的操作
我正在尝试“镜像”视图控制器:
- 应用程序实例化视图控制器 1(A 类)
- 应用程序在另一个 UIWindow(外部显示器,通过 Airplay 或物理连接器)上实例化视图控制器 2(也是 A 类)
- 视图控制器 1 接收到的任何触摸事件都应在视图控制器 2 上进行模仿
我已经MkMapViews
通过在 vc1 中捕获诸如区域更改或滚动之类的东西并告诉 vc2 设置其区域或滚动到该位置来处理简单视图控制器之类的事情,让 vc1 上的 UIControl IBActions 也调用相同的动作vc2等
这适用于简单的情况,但问题来自复杂的视图控制器,这些控制器具有扩展/收缩等UITableViews
自定义功能UITableViewCells
。我发现自己必须实现每一个可能的委托/动作,并使一堆对象知道他们应该做的事情不知道,如果我要让它完全可重用,这似乎是错误的。
我已经尝试遍历 vc1 的子视图树并使用objc_setAssociatedObject()
将视图控制器实例中的 UIResponder 相互关联,但我仍然必须捕获 vc1 上的每个委托/动作以查找UIResponder
vc2 上的模拟事件。必须有一种更简单的方法来做到这一点。我也尝试了子类化UIWindow
和覆盖sendEvent
并将事件发送到外部显示器UIWindow
,但每个UIEvent
似乎都有信息将它与UIWindow
它的起源联系起来,因为外部显示器UIWindow
在我发送它时没有做任何事情。
我将如何以一种允许我将镜像抽象为一个不错的子类或其他东西的方式来做到这一点,这样我就不必在每个视图控制器中乱扔特殊情况代码?我曾考虑过调整 UIView 的触摸事件,但我什至不确定这是否会有所帮助,因为 UITouches 和 UIEvents 与它们起源的 UIWindow 相关联,而且 UIEvent 似乎没有为我提供创建自己的方法事件。
注意:我想要做的不是默认 Airplay 镜像,因为我希望外部显示体验能够利用完整的显示分辨率和尺寸。这个想法是允许 iPhone 应用程序在设备本身上运行(即,比它的宽度更高),同时还提供针对该显示器的外部显示器的体验(比它的高度更宽,更高的分辨率,有机会以更易读的 HDTV 友好格式呈现信息)。
想法?
ios - 如何将所有 UISlider 事件链接到一种方法?
我的视图控制器中有以下方法:
我真的需要将所有事件一一链接到我的控制器吗?
ios - iOS - UIScrollView hitTest 不包含触摸
我有一个 UIScrollView,里面有 UIViews。UIScrollView 启用了两指滚动。每个 UIView 都有一个 panGestureRecognizer。我想要以下功能:
如果是两点触控平移-> 滚动。
如果单点触摸平移 && 触摸 UIView --> 触发 UIView 的 panGestureRecognizer。
我想通过覆盖 UIScrollView 的 hitTest 来做到这一点。如果触摸次数大于 1,则返回 UIScrollView 以可能滚动。如果触摸次数为 1,则返回正常的 hitTest 结果以可能触发 UIView 的 panGestureRecognizer。但是我的 UIScrollView 的 hitTest 代码从来没有任何接触!(虽然我成功的两指滚动,但 hitTest 没有任何接触。)
ios - 从我的应用程序生成远程控制事件
关于 iOS 上的远程控制事件,我有两个问题:
- 我知道音乐应用程序已注册到远程控制事件,然后可以从 iPhone 的播放器小部件接收此类事件。 假设我希望我的应用程序触发此类事件,这可能吗?
- 例如,耳机是如何产生这些事件的?
ios - 防止 MKMapView 更改选择(干净)
我有一个MKPinAnnotationView
显示自定义调用的自定义子类。我想处理该注释中的触摸事件。
我有一个可行的解决方案(如下),但感觉不对。我有一条经验法则,每当我使用时,performSelector: .. withDelay:
我都是在与系统作斗争,而不是与它一起工作。
对于 MKMapView 的激进事件处理和注释选择处理,是否有人有一个好的、干净的解决方法?
我目前的解决方案:
(我的注释选择类的所有代码)
我进行了自己的命中测试(没有这个,我的手势识别器不会触发,因为地图视图会消耗事件:
请注意,我还关闭了选择,以便在我的覆盖中setSelected
我可以忽略取消选择。
这是我不喜欢的评论1的行,但在 theta 延迟火灾结束时它也很毛茸茸。我必须走回超级视图链才能到达 mapView,这样我才能说服它选择仍然存在。
和
这一切似乎在没有和缺点的情况下都有效(就像我从其他解决方案中看到的闪烁一样。它相对简单,但感觉不对。
有人有更好的解决方案吗?