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

汤姆

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

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

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

然后,我将它与一个委托挂钩,以将其拖动和内容转发到双屏上的scrollview中。这很完美。

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

ScrollView.panGestureRecognizer.minimumNumberOfTouches = 2;

但是scrollview吞噬了所有触摸,而我只好用两指触摸将其他所有内容转发给后面的视图。我认为优先于

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

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

汤姆

我想分享/解释该问题的解决方案。话虽如此,我也想指出,海雀科的输入使我朝着正确的方向前进。非常感谢你的队友!

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

解决方案是将UIScrollview子类化,重写此方法将覆盖touchesBegan:和其他touch方法,如下所示(请参阅user1085093答案),并将其作为底层视图添加到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];
}}

我做了这样的scrollview的设置:

 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];

底层滚动视图的委托方法:

- (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属性,您必须在接口生成器文件中或运行时进行连接。这样,覆盖的滚动视图将知道谁是下一个响应者。请参阅Morningstar的答案

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有手势识别器的 UITextView - 有条件地将触摸转发到父视图

来自分类Dev

将触摸转发到UINavigationController交互式弹出手势无法完全正常工作

来自分类Dev

处理触摸和手势事件

来自分类Dev

触摸板手势和触摸屏手势

来自分类Dev

UIScrollView及其子视图的手势检测

来自分类Dev

WPF是否具有触摸和保持手势?

来自分类Dev

将触摸事件从自定义视图转发到ViewPager

来自分类Dev

将触摸转发到 UIPageViewController

来自分类Dev

侏儒-触摸板手势

来自分类Dev

轻触触摸中的手势方法

来自分类Dev

UIScrollView 不响应手势

来自分类Dev

ios标签栏触摸和触摸手势出现奇怪的错误

来自分类Dev

具有重叠视图的iOS MKMapView可以捕获选定的触摸/手势

来自分类Dev

禁用滚动触摸,在其子视图上启用手势?

来自分类Dev

避免两个不同视图之间的触摸手势冲突

来自分类Dev

如何在同一视图上交替使用平移手势和滑动手势?

来自分类Dev

UIScrollView覆盖我的子视图的平移手势识别器

来自分类Dev

如何在SpriteKit和Swift中区分手势和触摸?

来自分类Dev

同时使用滑动手势和触摸开始/移动/结束

来自分类Dev

完全禁用突触触摸板的“轻击和拖动手势”

来自分类Dev

完全禁用突触触摸板的“轻击和拖动手势”

来自分类Dev

将免触摸手势整合到我的Android应用程序中

来自分类Dev

检查哪个视图发送手势

来自分类Dev

在UIScrollView中同时允许单击手势识别器和双击

来自分类Dev

使UIControl仅接受滑动手势并传递触摸/点击手势

来自分类Dev

在父视图上双击手势,在子视图上单击手势

来自分类Dev

Ubuntu 18.04 LTS中的触摸板手势

来自分类Dev

在Tkinter中处理触摸屏手势

来自分类Dev

Android中的全局触摸手势?

Related 相关文章

  1. 1

    带有手势识别器的 UITextView - 有条件地将触摸转发到父视图

  2. 2

    将触摸转发到UINavigationController交互式弹出手势无法完全正常工作

  3. 3

    处理触摸和手势事件

  4. 4

    触摸板手势和触摸屏手势

  5. 5

    UIScrollView及其子视图的手势检测

  6. 6

    WPF是否具有触摸和保持手势?

  7. 7

    将触摸事件从自定义视图转发到ViewPager

  8. 8

    将触摸转发到 UIPageViewController

  9. 9

    侏儒-触摸板手势

  10. 10

    轻触触摸中的手势方法

  11. 11

    UIScrollView 不响应手势

  12. 12

    ios标签栏触摸和触摸手势出现奇怪的错误

  13. 13

    具有重叠视图的iOS MKMapView可以捕获选定的触摸/手势

  14. 14

    禁用滚动触摸,在其子视图上启用手势?

  15. 15

    避免两个不同视图之间的触摸手势冲突

  16. 16

    如何在同一视图上交替使用平移手势和滑动手势?

  17. 17

    UIScrollView覆盖我的子视图的平移手势识别器

  18. 18

    如何在SpriteKit和Swift中区分手势和触摸?

  19. 19

    同时使用滑动手势和触摸开始/移动/结束

  20. 20

    完全禁用突触触摸板的“轻击和拖动手势”

  21. 21

    完全禁用突触触摸板的“轻击和拖动手势”

  22. 22

    将免触摸手势整合到我的Android应用程序中

  23. 23

    检查哪个视图发送手势

  24. 24

    在UIScrollView中同时允许单击手势识别器和双击

  25. 25

    使UIControl仅接受滑动手势并传递触摸/点击手势

  26. 26

    在父视图上双击手势,在子视图上单击手势

  27. 27

    Ubuntu 18.04 LTS中的触摸板手势

  28. 28

    在Tkinter中处理触摸屏手势

  29. 29

    Android中的全局触摸手势?

热门标签

归档