iOS UIScrollView和控制器返回手势冲突解决方法

开发中,有部分UI,会将UIScrollView横向铺在底层,上面放tableView 或一些视图左右滚动切换,底层的scrollView会和Nav ViewController原有的返回手势冲突

解决办法,重写UIScrollView 的gestureRecognizerShouldBegin,在ScrollView滚动到头的时候,屏蔽ScrollView的手势

class GesturesConflictScrollView: UIScrollView {
  override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    back(by: gestureRecognizer)
  }

  private final func back(by gestureRecognizer: UIGestureRecognizer) -> Bool {

    guard gestureRecognizer == panGestureRecognizer else { return true }
    // point.x < 0 代表左滑即手指从屏幕右向左移动 反之一样
    let point: CGPoint = panGestureRecognizer.translation(in: self)
    let state: UIGestureRecognizer.State = gestureRecognizer.state
    let locDistance: CGFloat = UIScreen.main.bounds.size.width

    if state == .began || state == .possible {
      let locationPoint = gestureRecognizer.location(in: self)
      if point.x > 0 && locationPoint.x < locDistance && contentOffset.x <= 0 {
        return false
      }
      let pageCount = contentSize.width / UIScreen.main.bounds.size.width
      let criticalPoint = pageCount < 2 ? locDistance : locDistance * (pageCount - 1)
      if point.x < 0 && contentOffset.x == criticalPoint {
        return false
      }
    }
    return true
  }
}

到此这篇关于iOS UIScrollView和控制器返回手势冲突解决方法的文章就介绍到这了,更多相关iOS UIScrollView和控制器手势冲突内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2021-01-31

IOS中多手势之间的冲突和解决办法

IOS中多手势之间的冲突和解决办法 UIImageView默认是不支持交互的,也就是userInteractionEnabled=NO ,因此要接收触摸事件(手势识别),必须设置userInteractionEnabled=YES(在iOS中UILabel.UIImageView的userInteractionEnabled默认都是NO,UIButton.UITextField.UIScrollView.UITableView等默认都是YES). 在iOS中,如果一个手势A的识别部分是另一个手势

MySQL中字段名和保留字冲突的解决办法

我们知道通常的SQL查询语句是这么写的: 复制代码 代码如下: select col from table; 这当然没问题,但如果字段名是"from"呢? 复制代码 代码如下: select from from table; 若真的这么写,必然出错,当字段名与MySQL保留字冲突时,可以用字符"`"将字段名括起来: 复制代码 代码如下: select `from` from table; 总结 刚发现我原先设计的数据库表里有两个字段都用了保留字(add,commen

IOS中各种手势操作实例代码

先看下效果 手势相关的介绍 IOS中手势操作一般是 UIGestureRecognizer 类的几个手势子类去实现,一般我们用到的手势就这么5种: 1.点击  UITapGestureRecognizer 2.平移  UIPanGestureRecognizer 3.缩放  UIPinchGestureRecognizer 4.旋转  UIRotationGestureRecognizer 5.轻扫  UISwipeGestureRecognizer 我们上面这个实例中就用到了上面这5种手势,不

IOS 中UITextField和UITextView中字符串为空和空格的解决办法

IOS 中UITextField和UITextView中字符串为空和空格的解决办法 在用UITextField,UITextView声明的属性写一些页面的时候,经常会出现这样的小bug,就是给空值或空格也能进行传值或存储,这里给一些解决的小方法: eg: 这里声明了一个属性,就以此为例来说 @property (nonatomic, strong) UITextField *titlefield; 为空时: if(_titlefield.text == nil){ //执行一些警告操作 } if

iOS9与XCode7中不能使用http连接的快速解决办法

在Xcode7.0及以上版本中编译iOS APP时,默认会使用iOS9的一项新特性,使得所有http连接被禁用,项目里使用的API没有https支持,就悲剧了.差了官方文档,有这么一段话 App Transport Security App Transport Security (ATS) enforces best practices in the secure connections between an app and its back end. ATS prevents accident

详解JSP中使用过滤器进行内容编码的解决办法

详解JSP中使用过滤器进行内容编码的解决办法 问题 当通过JSP页面,向数据库中插入记录的时候,可能因为JSP页面编码原因,导致插入到数据库中的新纪录出现乱码.因此需要对JSP页面中的内容进行编码操作,从而保证与数据库中的编码一致. 解决方案 使用JSP中过滤器进行处理.处理步骤如下 1.新建一个servlet,使其实现javax.servlet.Filter接口 2.修改Servlet/JSP Mapping URL ,将其改为 /EncodingFilter 3.在EncodingFilte

详解git中配置的.gitignore不生效的解决办法

详解git中配置的.gitignore不生效的解决办法 前言: 通常我们希望放进仓库的代码保持纯净,即不要包含项目开发工具生成的文件,或者项目编译后的临时文件.但是,当我们使用git status查看工作区状态的时候,总会提示一些文件未被track.于是,我们想让git帮助我们忽略这些文件,不再提醒. 庆幸的是,git已经考虑到这点了.我们可以在项目的根目录下建立一个.gitignore的文件,该文件用来配置哪些文件或者目录不被track的.规则很简单,就在该文件中,写下你不想被track的文件

myeclipse中使用maven前常见错误及解决办法

1.jdk与jre (错误:java.lang.UnsupportedClassVersionError: Unsupported major.minor version 51.0) windows-preferences-java-Installed JREs Add适用的jre windows-preferences-java-compiler Compiler compliance level:改为与上一致版本 项目右键-properties-java compiler Compiler

Redis 中spark参数executor-cores引起的异常解决办法

Redis 中spark参数executor-cores引起的异常解决办法 报错信息 Unexpected end of stream 16/10/11 16:35:50 WARN TaskSetManager: Lost task 63.0 in stage 3.0 (TID 212, gzns-arch-spark04.gzns.iwm.name): redis.clients.jedis.exceptions.JedisConnectionException: Unexpected end

有关easyui-layout中的收缩层无法显示标题的解决办法

easyui-layout中的收缩层无法显示标题的问题原因分析: 在easyui-layout中设置面板初始化为可以折叠,然后就发现标题还有图标都木有了 嗯,就是结果列表上面.一片空白,出现了问题就要去解决它,在网上查了资料之后呢,决定修改jquery.easyui.min.js 版本为:jQuery EasyUI 1.4.1 在5105行有_39d方法,在其中设置两个变量_Cstitle,_CsIcon添加代码如下: var _Cstitle; var _closedTitle = p.pan