首页
学习
活动
专区
工具
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。...又可以响应事件了,原因是事件处理传递链向下传递了。

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

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

    57430

    iOS事件响应

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

    2.7K11

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

    乍一听,熟悉Android同学会说, ViewonClick事件监听就好了,然而,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。如果我们不对这些视图这样做,如果直接点击按钮,会吞没触摸事件并且不会传递到实际完整汉堡按钮

    55330

    《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"]; } 如果你看看触摸事件开始时

    35010

    IOS开发基础系列】UIView专题

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

    62830

    成为一名优秀 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

    88310

    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 运行

    78020

    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</code...会更新它视图 如果任何视图任何部分被标记为需要重画,UIKit 会要求视图重画自身 任何已经更新视图会与应用余下可视内容组合在一起,同时被发送到图形硬件去显示 图形硬件将已解释内容转化到屏幕...(个人对 View Drawing Cycle 理解是这样:UIKit 需要处理非常多事件,这些事件组合起来变成了一个非常复杂事件序列,在这个序列中有些特定点是 UIKit 专门提供给 UIView...会触发父 UIView layoutSubviews 事件 改变一个 UIView 大小时候也会触发父 UIView layoutSubviews 事件 然后按 Apple 要求方式来做就好了

    70710

    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
    领券