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

iOS / Swift :当UIButton上的触摸事件开始时,我如何向上或向下滚动视图?

在iOS开发中,可以通过给UIButton添加一个触摸事件来实现向上或向下滚动视图的效果。具体步骤如下:

  1. 首先,创建一个UIScrollView对象,并将其添加到你的视图层级中。你可以使用UIScrollView的initWithFrame方法来创建它,并设置好它的frame和contentSize属性。
  2. 接下来,在UIButton的触摸事件开始时,你可以通过给UIButton添加一个UIControlEventTouchDown事件来实现。你可以使用addTarget方法来为UIButton添加事件处理方法。
  3. 在事件处理方法中,你可以通过调用UIScrollView的scrollRectToVisible:animated:方法来实现滚动效果。你可以根据需要设置滚动的目标区域,然后将animated参数设置为YES来启用动画效果。

以下是一个示例代码:

代码语言:txt
复制
// 创建UIScrollView对象
let scrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
scrollView.contentSize = CGSize(width: 200, height: 400)

// 创建UIButton对象
let button = UIButton(type: .custom)
button.frame = CGRect(x: 0, y: 0, width: 200, height: 50)
button.setTitle("Button", for: .normal)

// 添加触摸事件处理方法
button.addTarget(self, action: #selector(buttonTouchDown), for: .touchDown)

// 将UIScrollView和UIButton添加到视图层级中
scrollView.addSubview(button)
view.addSubview(scrollView)

// 触摸事件处理方法
@objc func buttonTouchDown() {
    let targetRect = CGRect(x: 0, y: 200, width: 200, height: 200)
    scrollView.scrollRectToVisible(targetRect, animated: true)
}

在上述示例代码中,当UIButton被按下时,UIScrollView会向下滚动200个点的距离,以展示目标区域。

推荐的腾讯云相关产品:腾讯云移动应用分析(MTA),产品介绍链接地址:https://cloud.tencent.com/product/mta

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

相关·内容

iOS事件响应控制 原

在处理这个问题之前,我们应该先清楚IOS的事件响应机制到底是个什么样的原理。 首先,这个事件响应的机制是分为两个部分的。 1、先在视图层级关系中找到应该响应事件的那个视图。...这一步是什么意思,其实很简单,就是找到你所触摸点对应的那个最上层的视图,它的工作原理是这样的:当用户发出事件后,会产生一个触摸事件,系统会将该事件加入到一个由UIApplication管理的事件队列中,...这个方法在执行的时候,它会调用当前视图的pointInside:withEvent:这个方法,如果触摸事件在当前视图范围内,pointInside:withEvent:会返回YES,否则会返回NO;如果返回...:withEvent:方法会一层一层的向上找,若最上层响应的子视图pointInside:withEvent:返回YES,则返回此子视图,如果所有的都返回nil,则返回当前视图本身self。...又可以响应事件了,原因是事件处理传递链向下传递了。

55140
  • 【IOS开发基础系列】UIScrollView专题

    1 UIScrollView原理        在滚动过程当中,其实是在修改原点坐标。当手指触摸后,scroll view会暂时拦截触摸事件,使用一个计时器。...假如定时器行动时,没有任何的大的位置改变,滚动视图就发送一个跟踪事件给触摸的子视图。如果在定时器消失前,用户拖动他们的手指足够的远,滚动视图取消子视图的任何跟踪事件,滚动它自己。...当手指触摸后, scroll view会暂时拦截触摸事件,使用一个计时器。...这里的例子是在scrollView上放置4个2排2列的视图,但是内存中只占用6个视图的内存空间。当scrollView滚动的时候,通过不停的重用之前视图的内存空间,从而达到节省内存的效果。...如果先前的大就是向下滚动,否则就是向上滚动。         找到了向下滚动了,就该判断是否子视图已经离开了可视范围。方法就是判断当前offset和视图的位置进行比较。

    65630

    iOS 中的事件响应

    ,iOS 系统便会根据 Hit-Testing 的过程来确定触摸事件发生在哪个视图对象上,其实 Hit-Testing 的过程本质就是找到第一响应者(或最佳响应者,后文统一称为第一响应者)。...系统通过hitTest方法沿视图层级树从底向上(从根视图开始),从后向前(从逻辑上更靠近屏幕的视图开始)进行遍历,最终返回一个适合响应触摸事件的 View,并在过程中为 UITouch 记录了 view...UIButton 等系统 UIControl 会拦截其父 View 上的 UIGestureRecognizer,但不会拦截自己和子 View 上的 UIGestureRecognizer; 扩展 这里再介绍一下...当倒计时结束前,如果用户的手指发生了移动,直接滚动内容视图,不会将该事件传递给对应的子视图; 当倒计时结束时,如果用户的手指位置没有改变,则调用自身的 -touchesShouldBegin:withEvent...var delaysContentTouches: Bool // 是否可以取消内容视图被触摸,默认为YES,如果设置为NO,则一旦开始跟踪事件,即使手指进行移动也不会取消已经传递给子视图的事件,即滚动视图不会再滚动

    2.8K11

    跟iOS UI的捉迷藏(如何获取用户点击行为的控件title)

    乍一听,熟悉Android的同学会说, View的onClick事件监听就好了,然而,iOS与Android并不相同,一方面,iOS没有统一的获取title的方式,另一方面,不同UI控件title的位置不尽相同...1.如何获取用户控件的点击行为 事实上,由于获取的“所见所得”点击view行为,所以,思路上应该是对uiview或者及其子类得某个事件方法hook到,这样触发点击(广义上是触摸)行为后,可以根据发送的事件确定点击的...根据上文可知,当UIControl监听到需要处理的交互事件时,会调用 sendAction:to:forEvent: 将target、action以及event对象发送给全局应用,Application...这里我们用第一个,sendAction:to:forEvent: 里面有三个参数,最后一个是event,可以通过allTouches方法,可以获得触摸点的集合,可以判断多点触摸事件 而touch.view...进行判断,并获取title了 触摸事件参考文章:https://www.cnblogs.com/syxchina/archive/2012/10/14/2723541.html 2.如何获取不同控件的title

    1.4K10

    《Motion Design for iOS》(四十三)

    不论如何,如果你打算使用一个汉堡按钮,你也要让它有趣、讨喜来让人们点击。 所以一个汉堡按钮的基本元素是什么?...稍微看一下我们要构建的是什么。 开始时,我们有一个圆形的黑色按钮,里面中间有一个汉堡形的线。当按钮被点击时,它动画到一个稍微小一点的尺寸。但点击结束时,线会动画城红色的X。...当点击X状态时,动画会回到原始的颜色和位置。这是一个明显简化的关于发生了什么的解释,让我们来看看代码。...我添加了三个UIView对象到主汉堡按钮上,每个都是白色背景的圆角矩形。它们都放置在大汉堡按钮的水平中心,并在垂直方向上分离。...这段代码中最有趣的地方在于我设置这些每个视图的UserInteractionEnabled属性为NO。如果我们不对这些视图这样做,如果直接点击按钮,会吞没触摸事件并且不会传递到实际的完整汉堡按钮上。

    55430

    《Motion Design for iOS》(四十二)

    如果我想要在用户点击一个UIButton后立即运行一个动画,我就不得不自己写一个简单的自定义按钮类。但首先,先来看一看我们要构建的是什么。...iOS中的每个界面的控制都从UIResponder继承了这些方法,它是一个处理所有触摸控制事件的父类。有了子类,我就可以塞一些自己的代码来在这些方法启动的时候运行。...当使用Pop来构建好的响应动画去关联触摸动作时,一个聪明的做法是看看是否已经有一个Pop动画关联到这个视图或者layer了。如果有,只要更新已经存在的动画的toValue属性就可以了。...在这个例子中,我们动画了视图的尺寸,所以我们将动画添加到视图上。 现在让我们在触摸事件结束时做同样的事情。这次代码放在 -touchesEnded:withEvent:中。...scale.springBounciness = 20; scale.springSpeed = 18.0f; [self pop_addAnimation:scale forKey:@"scale"]; } 如果你看看触摸事件开始时

    35310

    【IOS开发基础系列】UIView专题

    iOS中,hit-Testing的作用就是找出这个触摸点下面的View是什么,HitTest会检测这个点击的点是不是发生在这个View上,如果是的话,就会去遍历这个View的subviews,直到找到最小的能够处理事件的...View收到hitTest消息时,会调用自己的pointInside:withEvent:方法,如果pointInside返回YES,则表明触摸事件发生在我自己内部,则会遍历自己的所有Subview去寻找最小单位...如果有看不懂的,可以参考我以前的博客 iOS面向切面编程 5.2 Responder Chain 参考文档: iOS事件分发机制(二)The Responder Chain http://suenblog.duapp.com...有关触摸事件在响应链上的分发,就差不多这么多东西,最重要的是大家可以看那几个touches方法,多做实验,就可以了解的更加深入。...,因为父视图的pointInside:withEvent:方法会返回NO,这样就不会继续向下遍历子视图了。

    70630

    成为一名优秀 Swift 开发人员的 10 个小技巧

    发送事件; 这是我们在 iOS 编码过程中最常见的一些场景。...幸运的是,我有一位 UI/UX 专家与我一起工作,为我提供了很多有关如何正确操作的建议。...事件操作中 sender 参数非常有用 最后一个技巧是使用 sender 参数。每个响应事件的方法或选择器都可以知道是谁触发了事件。...只需要将所有 UIButton 连接到相同的 @IBAction,然后使用发送方找出触发了该事件中的哪一个,并为该特定行为编写正确的实现即可。...在本文中,我将重点更多地放在Swift功能上,以提高代码效率并传递Swift机制的优点。我提供了一些简单的示例,说明每个iOS应用程序和开发人员应关注的重点。 - EOF -

    2.3K40

    事件传递、响应者链条

    一、事件 iOS里有三种事件:触摸(touch)、加速(motion)、远程控制 在UIResponder里,有以下事件处理 // 触摸事件 - (void)touchesBegan:(NSSet...的对象称之为响应者对象,能够处理touchesBegan等触摸事件 当一个Touch事件产生时,要先找到响应者,iOS通过Hit-Test机制来寻找响应者,每一个UIView(继承自UIResponder...UIApplication从事件队列中取出最新的触摸事件进行分发传递到UIWindow进行处理。...:原理 // point是该视图的坐标系上的点 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { // 1.判断自己能否接收触摸事件...在视图层次结构的最顶级视图,传递给ViewController ViewController将事件传递给window对象进行处理 window对象继续将事件或消息传递给UIApplication

    89010

    iOS之深入解析Xcode 13正式版发布的40个新特性

    大家好,又见面了,我是你们的朋友全栈君。...; 添加了对 UIButton 和 UIBarButtonItem 上的 changesSelectionAsPrimaryAction 属性的支持; 支持从对象库中创作和拖动 iOS Core Location...)以及 TestFlight 或 App Store 的发布历史记录过滤 Energy 报告列表; Xcode Organizer 中的新 Scroll Hitch Goals 使分析应用程序版本的滚动体验变得容易...枚举自定义如何将性能测试的自定义指标的测量值与设置的基线进行比较; XCTest 现在能够在受支持的 iOS 设备上的 UI 测试中合成指针交互; Xcode 现在为在运行测试时崩溃的进程收集代码覆盖率数据...和 CHHapticEventTypeAudioCustom 类型的事件现在恢复播放中间事件。

    8.8K40

    《Motion Design for iOS》(十五)

    从UIKit和CoreAnimation开始 通常情况下,iOS app中屏幕上的物体都是UIView对象。它们是矩形的并且有坐标和大小来定义它们在屏幕上的位置和尺寸。...UIView是用来构建你的界面的UIKit Framework中基本的界面对象。每个视图都可能伴随着文本、形状或图片绘制。...这些是为某些功能或特性特定的特殊的UIView对象。包括作为界面按钮的UIButton、用来显示图片的UIImageView、显示文本的UILabel和显示列表的UITableView。...你也可以通过绘制任何你想要的东西来完全自定义UIView。 这是我的app Interesting for iPhone的截屏和界面中一些视图的分解。...UIView对象有很多的职责,其中之一就是事件处理,即响应触摸事件。如果你想的话你界面中的所有视图都可以响应触摸事件,或者你可以指定只有特定的视图会在用户触摸它们时响应。

    85640

    实现更安全、高扩展的自定义键盘 非UIButton

    当然这只是一款软件,一种情况,所谓防小人不妨君子,我们需要更安全的键盘 当前网上的许多键盘都是通过 UIButton 堆起来,这样事件控制方便,title 设置便利,UI设计简易,不用考虑触摸事件等等诸多好处...触摸事件回调频率高,并且触摸事件中没有数据,最大程度上避免了恶意监控触摸事件,最大程度上避免了恶意监控控件(UIButton,UILabel 此键盘功能是建立在平台的思想上开发的。...对外暴漏接口和回调 管理所有键盘视图,并负责切换键盘 KKeyBoardMainView 键盘主视图 管理所有的按键 处理所有的触摸事件 将触摸事件转化为按键的状态,将按键状态通知按键...主要处理长按事件,当按下不松手时,连续回调删除的事件 KKShiftItemView 已实现的shift按键。可以直接使用。 shift 按键的一个实现。...身份证号键盘 源码在 我的github 上 【注】请使用 Swift 3 运行

    78320

    Ios常用第三方动画框架(三)

    VJDeviceSpecificMedia -如何根据设备选择不同尺寸的图片 可以通过设置不同尺寸设备的LaunchImage,来使得App适配这些设备,要是在不同不同尺寸设备上使用不同大小的图片,则需要在代码中一一判断...用于简化实现各种类型的旋转木马(分页滚动视图),无限轮播 ,iOS开发之多图片无缝滚动组件封装与使用。 KIPageView - 无限循环PageView,横向TableView,无限轮播。...KYAnimatedPageControl - 除了滚动视图时PageControl会以动画的形式一起移动,点击目标页还可快速定位。支持两种样式:粘性小球和旋转方块。...TKSubmitTransition - 基于 UIButton 的登录加载、返回按钮转场动画组件及示例。...UIViewXXYBoom.swift - 一个炫酷好玩的爆炸效果,如何实现这个效果。

    9.2K30

    iOS中手势的应用1. 四类事件的主要方法2. 响应者链3. 手势识别功能(Gesture Recognizer)4. 手势的使用

    iOS设备现如今大受欢迎的最重要原因之一就在于其开创了触控操作的潮流。发展到现在,无论是Android还是iPhone,现在APP与用户进行交互,基本上都是依赖于各种各样的触控事件。...UIResponder大体有四类事件:触摸、加速计、远程控制、按压(iOS9.0以后出来的,3DTouch)。 ?...触摸事件.png 但是在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。我们称之为“响应者对象”。...响应者链 概念吶,我们就不说了,网上的文章应该一搜一大堆。这里是比较理论化的知识,是比较考验我们对于iOS中触摸事件的理解深度的。这里我就只是用简单的方式,写一下自己对于这部分的理解。...最终找到这个干活的控件,我们学术上就叫做第一响应者对象。找到了负责处理的按钮之后如何给出相应处理呢?大概过程就是这样: button尝试处理事件。如果它不能处理事件,则将事件传递给其父视图。

    2.3K40

    探究 css touch-action 属性

    See 这样的bug 然后找了一通发现可以用 *{touch-action:none}这个方法 用法是禁用元素(及其不可滚动的后代)上的所有手势,以使用自己提供的拖放和缩放行为(如地图或游戏表面...当手势开始时,浏览器与触摸的元素及其所有祖先的触摸动作值相交直到一个实现手势(换句话说,第一个包含滚动元素)的触摸动作值。...值 auto 当触控事件发生在元素上时,不进行任何操作。 none 当触控事件发生在元素上时,不进行任何操作 pan-x 启用单指水平平移手势。...请注意,滚动“向上”(pan-up)意味着用户正在将其手指向下拖动到屏幕表面上,同样 pan-left 表示用户将其手指向右拖动。...示例 最常见的用法是禁用元素(及其不可滚动的后代)上的所有手势,以使用自己提供的拖放和缩放行为(如地图或游戏表面) #map { touch-action: none; } 另一种常见的模式是使用指针事件处理水平平移的图像轮播

    1.8K10

    【iOS 开发】从 setNeedsLayout 说起

    UIKit interactions with your view objects 上图对应的事件序列如下: 用户触摸屏幕 硬件报告触摸事件给 UIKit 框架 UIKit 框架将触摸事件打包成 UIEvent...对象,然后分发给合适的视图 事件处理代码会对相应事件作出响应,代码可以是这样的: -更改 frame、bounds、alpha的子视图 如果任何视图的任何部分被标记为需要重画,UIKit 会要求视图重画自身 任何已经更新的视图会与应用余下的可视内容组合在一起,同时被发送到图形硬件去显示 图形硬件将已解释内容转化到屏幕上...(我个人对 View Drawing Cycle 的理解是这样的:UIKit 需要处理非常多的事件,这些事件组合起来变成了一个非常复杂的事件序列,在这个序列中有些特定的点是 UIKit 专门提供给 UIView...会触发父 UIView 上的 layoutSubviews 事件 改变一个 UIView 大小的时候也会触发父 UIView 上的 layoutSubviews 事件 然后按 Apple 要求的方式来做就好了

    71710

    Android中文API——ScrollView

    参数 canvas 绘制视图的画布 public boolean executeKeyEvent (KeyEvent event) 当接收到key事件时,用户可以调用此函数来使滚动视图执行滚动,类似于处理由视图体系发送的事件...(译者注: 如何监听android的屏幕滑动停止事件) 参数 velocityY Y方向的初始速率。正值表示手指/光标向屏幕下方滑动,而内容将向上滚动。...参数 direction 滚动方向:FOCUS_UP表示视图向上滚动;FOCUS_DOWN表示视图向下滚动 返回值 若key事件被消耗(consumed)返回true,其他情况返回false。...此方法将向上或者向下滚动一屏,并且将焦点置于新可视区域的最上/最下。如果没有适合的component作为焦点,当前scrollView将收回焦点。...参数 direction 滚动方向:FOCUS_UP表示向上翻一页,FOCUS_DOWN表示向下翻一页。 返回值 此key事件被消耗(cosumed)返回true,其他返回false。

    4.6K30

    开发 h5| Hybrid | 微信小程序 | 实践踩坑总结十六条

    整个流程就是,当视图容器向上滑动的时候,商品卡片容器需要缓慢移动,首先需要将商品卡片需要脱离标准流,设置定位position:fixed 固定定位。然后控制top值来控制滑块的缓慢移动。...当视图容器的最后一个元素设置 margin-bottom ,期望距离整个容器视图有一个距离的时候,发现在安卓手机正常,但是在ios下,会出现margin-bottom无效的情况。...: touch 卡住不动问题 背景 在ios页面向上向下滑动的过程中,会出现卡顿,不流畅的现象,具体问题如下: 1 在safari上,使用了-webkit-overflow-scrolling:touch...在解决这个问题之前,我们先理解-webkit-overflow-scrolling的两个属性 1 auto: 使用普通滚动, 当手指从触摸屏上移开,滚动会立即停止。...2 touch: 使用具有回弹效果的滚动,当手指从触摸屏上移开,内容会继续保持一段时间的滚动效果。继续滚动的速度和持续的时间和滚动手势的强烈程度成正比。同时也会创建一个新的堆栈上下文。

    2.5K30
    领券