iOS开发 UIScrollView加UIPanGestureRecognizer手势冲突

本文介绍在JTHorizontalCalendarView中添加UIPanGestureRecognizer后,如何解决与UIScrollView手势冲突的问题。通过使用手势代理和gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:方法,判断手势方向,实现上下滚动和左右滑动同时响应。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

用JTCalendar插件时,月历的view是JTHorizontalCalendarView类,是UIScrollView的子类,可以左右滚动切换月历。但是应用中需要响应上下滚动,所以我再加了UIPanGestureRecognizer手势,结果就和UIScrollView冲突了:我加的手势有效果,但是JTHorizontalCalendarView就不再响应手势,就不能左右滚动了。网上找到了下面这篇文章终于优雅的解决了问题。下面这篇文章作者遇到的问题是UIScrollView上叠加了一个控件,而我的是同一个控件上再加一个手势,所以和我的问题略微有点不一样,但是解决方法完全是相同的。

UIScrollView子控件加UIPanGestureRecognizer拖动手势

问题描述:横向UIScrollView里面的子控件,我使用了UIPanGestureRecognizer来实现拖动,但是发现UIScrollView无法响应滚动事件,因为scroll里面布满了我放的控件,所以不能响应。如果先让scroll响应

[panGestureRecognizer requireGestureRecognizerToFail:sroll.panGestureRecognizer]//先处理scroll

发现,我添加的手势又不响应了,因为sroll滚动每次都成功。

解决办法:后来在 栈溢出 问答平台找到了一个没有采纳的答案解决了问题,使用手势代理,通过

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

来解决

这个方法是用来处理多手势共存的,返回NO则响应一个手势,返回YES为同时响应,我的处理方法是,判断当前gestureRecognizer是否是panGestureRecognizer,然后判断方向,如果为上下方向则返回NO,则scroll不响应,否则都响应,问题完美解决。

当然拖动手势没法直接获取方向需要通过

CGPoint translation = [(UIPanGestureRecognizer*)gestureRecognizer translationInView:self];

来获得,如果translation.y的绝对值大于translation.x的绝对值就可以看成是上下方向。

原文链接:https://blog.csdn.net/assholeu/article/details/16821151

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值