首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

touchesBegan在UIScrollView Swift 5中不起作用

touchesBegan 方法在 UIScrollView 中默认情况下不会被调用,这是因为 UIScrollView 会拦截触摸事件以处理滚动和其他手势。如果你需要在 UIScrollView 上使用 touchesBegan 方法,可以通过重写 UIScrollView 的触摸事件方法来实现。

基础概念

touchesBeganUIResponder 类的一个方法,用于处理触摸开始事件。UIScrollViewUIView 的子类,而 UIView 又继承自 UIResponder,因此理论上 UIScrollView 可以响应触摸事件。

相关优势

通过重写触摸事件方法,你可以实现自定义的触摸行为,例如在滚动视图中检测特定的手势或触摸点。

类型与应用场景

  • 类型:触摸事件处理方法。
  • 应用场景:需要在滚动视图中进行额外的触摸处理,如检测双击、长按等。

解决方法

要使 touchesBeganUIScrollView 中生效,可以通过以下步骤:

  1. 创建一个 UIScrollView 的子类。
  2. 在子类中重写 touchesBegan 方法。
  3. 确保 UIScrollViewdelaysContentTouches 属性设置为 false,这样可以减少触摸事件的延迟。

示例代码

代码语言:txt
复制
import UIKit

class CustomScrollView: UIScrollView {
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }
    
    private func setup() {
        delaysContentTouches = false
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesBegan(touches, with: event)
        // 在这里添加你的自定义触摸处理逻辑
        print("Touches began")
    }
}

使用方法

在你的视图控制器中使用 CustomScrollView 替代标准的 UIScrollView

代码语言:txt
复制
class ViewController: UIViewController {
    
    var scrollView: CustomScrollView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        scrollView = CustomScrollView(frame: view.bounds)
        scrollView.contentSize = CGSize(width: view.bounds.width, height: view.bounds.height * 2)
        view.addSubview(scrollView)
    }
}

通过这种方式,你可以在 UIScrollView 上捕获并处理触摸开始事件。

注意事项

  • 确保在重写触摸事件方法时调用 super 的对应方法,以保持原有的触摸行为。
  • 如果你的滚动视图中有可交互的子视图,可能需要进一步处理触摸事件的传递。

通过上述方法,你应该能够在 UIScrollView 中成功使用 touchesBegan 方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • iOS 中的事件响应

    响应链-方法调用 ParentView是TapTestView的父 View,TapTestView没有重写touchesBegan 方法,在ParentView的touchesBegan 方法中打上断点...比如 beginTracking 是在 touchesBegan 方法内部调用的。 通过下述方法参数,我们可以注意到:UIControl 处理的不是 touch 数组而是单个 touch。...当用户在 UIScrollView 的一个子视图上按下时,UIScrollView并不知道用户是想要滑动内容视图还是点击对应子视图,所以在按下的一瞬间, 事件 UIEvent 从 UIApplication...open var canCancelContentTouches: Bool // 在UIScrollView的子类中重写该方法,用于返回是否将事件传递给对应的子视图,默认返回YES,如果返回NO,该事件不会传递给对应的子视图..., in view: UIView) -> Bool // 在UIScrollView的子类中重写该方法,用于返回是否取消已经传递给子视图的事件,默认当子视图是UIControl时返回NO,否则返回YES

    2.8K11

    iOS 面向协议方式封装空白页功能

    而Swift除了可以面向对象编程,它还可以面向协议编程。那可不可以也用协议来解决情况呢?...嘿嘿,这个可以有,那我们接下来就来试试怎么通过协议的方式来避免上述情况,并且实现一行代码添加空白页功能 前言 如果对面向协议有疑问的同学可以看下我之前的两篇文章 iOS - Swift 面向协议编程...(一) iOS - Swift 面向协议编程(二) 之前的文章中提到了,协议除了起规范作用,还有别一个用处,就是赋予能力。...我们现在的目的就是让目标控制器或者目标视图在遵守我们的协议后,就可以有实现空白页的功能。...,非常地恰巧,我们定义的方法lxf_EmptyDataSet需要外界将UIScrollView传递进来,在DZNEmptyDataSet的数据源方法和代理方法也有scrollView。

    1.5K50

    iOS性能优化之启动优化

    方法出现死递归 在touchesBegan方法中设置断点,运行项目,查看汇编代码 方法中被插入三次__sanitizer_cov_trace_pc_guard函数的调用 这就是循环引发的大坑,SanitizerCoverage...回调函数中存入队列的还是touchesBegan的函数地址,这会导致队列中永远存在一个到两个touchesBegan,next永远获取不完 解决办法: 在Build Setting→Other C Flags...→Write Link Map File,设置为YES\ 编译项目,打开LinkMap文件\ 配置生效,二进制重排成功\ 5.6.5 swift的函数符号 在Other C Flags中的配置,仅对...而Swift使用swiftc编译器,要想获得swift函数符号,需要对Other Swift Flags进行配置\ 和Clang的配置参数略有出入\ 添加-sanitize-coverage=func...混编,成功得到Swift函数符号

    1.9K11

    MyLayout&TangramKit 的重大升级!

    MyLayout和TangramKit是一套基于frame之上的UI界面布局库的OC版本和Swift版本。目前最新版本升级为MyLayout1.7.0和TangramKit1.4.0。 ?...Swift1.4.0: https://github.com/youngsoft/TangramKit 这次升级的主要目的是为了和AutoLayout结合的更加紧密。...2.UIScrollView的滚动 对于UIScrollView来说需要设置contentSize来实现滚动的能力。...在设置约束依赖时将容器视图的上下左右分别依赖UIScrollView视图的上下左右边界,如果需要上下滚动则将容器视图中的最底部子视图的底部边界依赖容器视图的底部边界。...然后在UITableViewCell的派生类的视图代码布局处或者在-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath

    2.1K20

    iOS_NestedScrollView(嵌套ScrollView)

    这时候两个scrollView都会滑动,我们可以在滑动回调里,根据当前的情况进行处理,实现想要的滑动规则了。----滑动规则制定Tips:规则一定要提前确认好。...undefinedMOMultiTabContainerViewController内部是一个scrollView,添加多个subScrollView,结构如下:(详情可见MOMultiTabContainerViewController.swift...height: containerHeight - headerHeight)}----5、传递滑动回调将所有滑动回调都交由MOSubScrollExecutor处理:(把嵌套滑动规则集中在一个文件里...---6.5、处理subScrollView下拉:/// 下拉: list 先拉到顶,再放大 headerViewfunc handlePullDown(_ scrollView: UIScrollView...的contentOffset的精确度问题,所以在计算或判等时需要注意了。

    93930
    领券