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

IOS开发系列——UIView专题之五:常用开发技巧篇

的事件队列,UIApplication会从事件队列中取出触摸事件并传递给key window(当前接收用户事件的窗口)处理,window对象首先会使用hitTest:withEvent:方法寻找此次Touch...操作初始点所在的视图(View),即需要将触摸事件传递给其处理的视图,称之为hit-test view。...如果一个子视图的区域超过父视图的bound区域(父视图的clipsToBounds属性为NO,这样超过父视图bound区域的子视图内容也会显示),那么正常情况下对子视图在父视图之外区域的触摸操作不会被识别...对于每个触摸操作都会有一个UITouch对象,UITouch对象用来表示一个触摸操作,即一个手指在屏幕上按下、移动、离开的整个过程。...the responder chain 在此例子中button,scrollview同为topView的子视图,但scrollview覆盖在button之上,这样在在button上的触摸操作返回的hit-test

1.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ReactJS到React-Native,架构原理概述

    对于 React Native ,React Native 调用Objective-C 的API 去渲染iOS 组件,调用Java API 去渲染Android 组件,而不是渲染到浏览器DOM 上。...这些React-Native组件映射到渲染到App中的真正的原生iOS和Android UI组件,意味着你不能重用之前使用ReactJS渲染的HTML, SVG或Canvas任何库。...层将此 JSON 文件映射渲染到原生 App 的页面元素上,最终实现了在项目中只需要控制 state 以及 props 的变更来引起 iOS 与 Android 平台的 UI 变更。...PanResponder提供了一系列function来捕捉用户的触摸事件,例如onPanResponderGrant (touchstart), onPanResponderMove(touchmove...通过这些function可以得到原生事件和手势状态信息,如所有的touch、位置以及滑动距离,速度和触摸中心等。导航React-Native提供的Navigator组件。

    5.4K10

    ReactJS到React-Native,架构原理概述

    对于 React Native ,React Native 调用Objective-C 的API 去渲染iOS 组件,调用Java API 去渲染Android 组件,而不是渲染到浏览器DOM 上。...这些React-Native组件映射到渲染到App中的真正的原生iOS和Android UI组件,意味着你不能重用之前使用ReactJS渲染的HTML, SVG或Canvas任何库。...层将此 JSON 文件映射渲染到原生 App 的页面元素上,最终实现了在项目中只需要控制 state 以及 props 的变更来引起 iOS 与 Android 平台的 UI 变更。...PanResponder提供了一系列function来捕捉用户的触摸事件,例如onPanResponderGrant (touchstart), onPanResponderMove(touchmove...通过这些function可以得到原生事件和手势状态信息,如所有的touch、位置以及滑动距离,速度和触摸中心等。导航React-Native提供的Navigator组件。

    6.2K10

    【Hybrid开发高级系列】ReactNative(三)——RN能力简介

    React Native,你可以使用标准的平台组件,例如iOS的UITabBar或安卓的Drawer。...参见调试 1.3 触摸事件处理         React Native实现了一个强大的触摸事件处理系统,可以在复杂的View层次关系下正确地处理触摸事件。...同时还提供了高度封装的组件如TouchableHighlight等,可以直接嵌入到ScrollView或者其它的元素中,无需额外配置。...除此之外,我们还吸纳了web生态系统中的通用标准,并在必要的时候为这些API提供兼容层。如此一来,npm上的许多库就可以在React Native中直接使用。...尽管如此,使用自定义的原生视图和模块来扩展ReactNative也非常容易 —— 这意味着你现有的所有工作都可以被复用,你喜欢的各种原生库都可以被导入。

    32830

    iOS 中的事件响应

    ,iOS 系统便会根据 Hit-Testing 的过程来确定触摸事件发生在哪个视图对象上,其实 Hit-Testing 的过程本质就是找到第一响应者(或最佳响应者,后文统一称为第一响应者)。...UIGestureRecognizer 上节我们分析了当只有UIResponder参与事件响应时事件的传递是什么样的,那这节我们看一下当UIGestureRecognizer加入到响应时,事件的传递与响应会发生什么变化...传递到 UIScrollView 后,其会先将该事件拦截而不会立即传递给对应的子视图, 同时开始一个 150ms 的倒计时,并监听用户接下来的行为。...:inContentView:方法询问是否将事件传递给对应的子视图 (如果返回 NO, 则该事件不会传递给对应的子视图,如果返回 YES,则该事件会传递给对应的子视图,默认为 YES); 当事件被传递给子视图后...open var canCancelContentTouches: Bool // 在UIScrollView的子类中重写该方法,用于返回是否将事件传递给对应的子视图,默认返回YES,如果返回NO,该事件不会传递给对应的子视图

    2.8K11

    React Native组件(二)View组件解析

    3.属性 3.1 触摸事件回调函数 触摸事件回调函数用来处理用户的触摸屏幕操作,一般情况下,触摸事件都是在其他组件中完成的。关于触摸事件是一个比较大的知识点,这里只介绍这些触摸事件回调函数的作用。...它的一个特殊的与性能优化相关的属性,通常在ListView和ScrollView中使用,当组件有很多子组件不在屏幕显示范围时,可以将removeClippedSubviews设置为true,允许释放不在显示范围子组件...它用来决定视图是否要把它本身(以及所有的子视图)渲染到一个GPU上的硬件纹理中。...shouldRasterizeIOS (iOS) shouldRasterizeIOS的取值为bool,是iOS平台独有的属性。它决定视图是否需要在被混合之前绘制到一个位图上。...栅格化会导致离屏的绘图传递,位图会消耗内存。所以使用此属性需要进行充分的测试和评估。 还有一些View属性这里没有给出,比如RN为了方便失能人士使用手机而提供的相关属性等等,具体的属性请查看官方文档。

    2.5K60

    iOS开发UIScrollView使用详解 原

    iOS开发UIScrollView使用详解 一、ScrollView常用方法和属性 @property(nonatomic)CGPoint contentOffset; 设置滚动的偏移量 @property...) BOOL delaysContentTouches; 设置视图是否延迟处理触摸事件(会将消息传递给子视图) @property(nonatomic) BOOL canCancelContentTouches...; 设置是否给子视图传递取消动作的消息(默认设置为YES,当scrollView触发事件的时候,其子视图不能触发,如果设置为NO,则子视图会继续触发事件) - (BOOL)touchesShouldBegin...*)scrollView; 视图已经开始缩放时触发的方法 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView; 视图开始拖动时触发的方法...:(UIScrollView *)scrollView; 视图动画结束时触发的方法,使用set方法设置偏移量后回触发 - (UIView *)viewForZoomingInScrollView:(UIScrollView

    1.7K30

    React Native之ScrollView控件详解

    不过在RN开发中 ,使用ScrollView必须有一个确定的高度才能正常工作,因为它实际上所做的就是将一系列不确定高度的子组件装进一个确定高度的容器(通过滚动操作)。...这种情况下可以使用此属性,指定以某种颜色来填充多余的空间,以避免设置背景和创建不必要的绘制开销。一般情况下并不需要这种高级优化技巧。...16:(ios)automaticallyAdjustContentInsets bool 如果滚动视图放在一个导航条或者工具条后面的时候,iOS系统是否要自动调整内容的范围。默认值为true。...默认值为true(在以上情况下可以拖动滚动视图。) 21:(ios)centerContent bool 当值为true时,如果滚动视图的内容比视图本身小,则会自动把内容居中放置。...更大的数值能够更及时的跟踪滚动位置,不过可能会带来性能问题,因为更多的信息会通过bridge传递。默认值为0,意味着每次视图被滚动,scroll事件只会被调用一次。

    5.9K70

    简述OC语言

    在Objective-C中,没有方法调用这种说法,只有消息传递。在C++或Java中调用某个类的方法,在Objective-C中是给该类发送一个消息。...OC的动态性的三方面 动态类型、动态绑定、动态加载(动态是因为 到运行时(runtime)才会做一些事情) 动态类型:就是id类型; 动态绑定:需要用到@selector/SEL,SEL并不是C里面的函数指针...4.使线程周期性工作; 事件响应链 对于IOS设备用户来说,操作设备的方式主要有三种:触摸屏幕、晃动设备、通过遥控设施控制设备。...对应的事件类型有以下三种: 1、触屏事件(Touch Event) 2、运动事件(Motion Event) 3、远端控制事件(Remote-Control Event) 传递链:由系统向离用户最近的...View); 3、视图控制器(如果有的话)的下一个响应者为其管理的视图的父视图; 4、单例的窗口(UIWindow)的内容视图将指向窗口本身作为它的下一个响应者,Cocoa Touch应用不像Cocoa

    2.1K20

    Weex 事件传递的那些事儿

    在这个方法中,Weex会计算点击出点击到的视图的坐标以及宽高尺寸。 说到这里就需要提到Weex的坐标计算方法了。 (1)计算缩放比例因子 在日常iOS开发中,开发者使用的计算单位是pt。...根据_panGesture在当前视图上拖动形成的有方向的向量,进行判断当前拖动的方向。 ? (五)通用触摸事件 最后就是通用的触摸事件。 Weex里面对每个Component都新建了一个手势识别器。...与组件Component的 appear 和 disappear 事件不同的是,viewappear 和 viewdisappear 事件关注的是整个页面的状态,所以它们必须绑定到页面的根元素上。...特殊情况下,这两个事件也能被绑定到非根元素的body组件上,例如wxc-navpage组件。...在Weex中,iOS Native把事件传递给JS目前只有2种方式,一是Module模块的callback,二是通过Component组件自定义的通知事件。

    2.7K40

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

    iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了。...iOS中,hit-Testing的作用就是找出这个触摸点下面的View是什么,HitTest会检测这个点击的点是不是发生在这个View上,如果是的话,就会去遍历这个View的subviews,直到找到最小的能够处理事件的...如果中断了响应链,那么所有在链上的nextResponder都不会得知有事件发生,iOS也提供了这个方法,其实很简单:         我们在重写TouchesEvents的时候,如果不想让响应链继续传递...Application的事件队列,UIApplication会从事件队列中取出触摸事件并传递给key window(当前接收用户事件的窗口)处理,window对象首先会使用hitTest:withEvent...对于每个触摸操作都会有一个UITouch对象,UITouch对象用来表示一个触摸操作,即一个手指在屏幕上按下、移动、离开的整个过程。

    70630

    iOS 全屏侧滑手势UIScrollViewUISlider间滑动手势冲突

    手势冲突.gif 三、分析解决问题 这些问题很显然,肯定跟iOS事件的传递和响应链机制有关系,不了解的可以看看这篇文章 史上最详细的iOS之事件的传递和响应机制-原理篇。...分析解决问题 1 如果你了解事件的传递和响应链机制的话,应该能想到,是由于UIScrollView的内部手势方法阻断了全屏侧滑返回手势的的响应,那我们就找到这个方法,代码如下 ; 创建一个UIScrollView...scrollView.delaysContentTouches = NO; delaysContentTouches 默认值为YES 表示延迟scrollView上子视图的响应,所以当直接拖动UISlider...//拦截事件的处理 事件传递给谁,就会调用谁的hitTest:withEvent:方法。...:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ //如果手势是触摸的UISlider

    4.1K20

    求职笔记-iOS篇

    UIWindow的主要作用: 作为最顶层的视图容器,存放app的视图; 传递触摸和键盘等事件; KVO与Notification的异同 KVO和Notification本质都是观察者模式。...; 在对象被回收的时候,经过层层调用,会最终触发下面的方法将所有Weak指针的值设为nil。...,管理触摸、手势等交互事件; 模型树/逻辑树(目标帧) :CALayer - modelLayer(),不涉及响应链(通过视图层级关系传递触摸事件的机制) **呈现树/动画树(当前帧) **:presentationLayer...ios整个系统基本上是基于runloop这种架构的,ios程序的main线程整体上也是基于runloop的,各种事件的响应应该也是基于source这种思路。...UIApplication对象是第一个接收到时间的对象,它决定事件如何被处理。触摸事件分发到主窗口,窗口再分发到对应出发触摸事件的 View。其他的事件通过其他途径分发给其他对象变量做处理。

    1.2K60

    React-native踩坑小记

    React-native踩坑小记 最近开始研究ReactNative咯,大概一两周了吧已经,略略说一下遇到的一些坑爹问题 问题一般都出在android上。。。...所以我们将swiper挪到了listview的header中。(因为header被下拉刷新的组件所使用,所以我们重写了插件部分代码,将swiper塞了进去) 2....于是我们开始研究android的触摸事件到底是怎么个执行法。 大致是一个先捕获,再冒泡的过程: 最外层组件触发回调,询问是否捕获事件,并阻止事件继续传递。...Touch* 组件有两个事件是这里我们需要用到的:onPressIn和onPressOut 这两个事件会在手指按下和抬起时触发; 所以我们需要做的就是在这两个事件中触发锁定和解锁外层scrollview...,可高度自定义的上拉刷新和下拉加载样式 支持触摸滑动切换的tab页签,头部可自定义 目前支持度最高的一个Swiper插件 结束语: 目前研究ReactNative所遇到的坑就这么几个咯,所幸能够解决这种问题

    4.5K80

    Android中文API——ScrollView

    TextView类也有自己的滚动功能,所以不需要使用ScrollView,但是只有两个结合使用,才能保证显示较多内容时候的效率。但只有两者结合使用才可以实现在一个较大的容器中一个文本视图效果。...参数 direction 按下的箭头所对应的方向 返回值 如果我们处理(消耗)了此事件返回true,否则返回false。...此方法将视图滚动到顶部或者底部,并且将焦点置于新的可视区域的最顶部/最底部组件。若没有适合的组件做焦点,当前的ScrollView会收回焦点。...如果此方法返回false,接下来的事件(up to and including the final up)将最先被传递当此,然后是目标的onTouchEvent()。 4....如果返回true,将不会收到以下任何事件:目标view将收到同样的事件但是会伴随ACTION_CANCEL,并且所有的更进一步的事件将会传递到你自己的onTouchEvent()方法中而不会再在这里出现

    4.6K30

    iOS多设备适配简史以及相应的API支撑实现

    一直在做iOS开发的程序员相信在下面的两个版本交界处需要处理适配的坎一定让你焦头烂额过: iOS7出来后视图控制器的根视图默认的尺寸是占据整个屏幕的,如果有半透明导航条的话也默认是延伸到导航栏和状态栏的下面...NSLayoutConstraint约束以及iOS9上的封装改进 在iOS6时代苹果推出了AutoLayout的技术解决方案,这是一套采用以相对约束来替代硬编码的解决方法,然而糟糕的方法名和使用方式导致使用成本和代码量的急剧增加...,也可以将它添加进入视图中去,也可以将这个占位视图作为其他视图的约束依赖项,唯一的不同就是占位视图不会进行任何的渲染和绘制,它只会参与布局处理。...SizeClasses多屏幕适配 当我们的程序可能需要同时在横屏和竖屏下运行并且横屏和竖屏下的布局还不一致时,而且希望我们的应用在小屏幕上和大屏幕上(比如iPhone8 Plus 以及iPhoneX S...但是在实际的实践中我们很少有看到使用SizeClasses的例子和场景以及在我们开发中很少有使用到这方面的技术,所以我认为这应该是苹果的一个多屏幕适配的失败解决的方案。

    1.1K30

    史上最详细的iOS之事件的传递和响应机制-原理篇

    中的事件 iOS中的事件可以分为3大类型: 触摸事件 加速计事件 远程控制事件 这里我们只讨论iOS中的触摸事件。..., offsetX, offsetY);} ---- (三)iOS中的事件的产生和传递 3.1.事件的产生 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中,为什么是队列而不是栈...3.2.事件的传递 触摸事件的传递是从父控件传递到子控件 也就是UIApplication->window->寻找处理事件最合适的view 注 意: 如果父控件不能接受触摸事件,那么子控件就不可能接收到触摸事件...2.UIApplication会从事件队列中取出最前面的事件,把事件传递给应用程序的主窗口(keyWindow)。   3.主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件。...首先看initial view能否处理这个事件,如果不能则会将事件传递给其上级视图(inital view的superView);如果上级视图仍然无法处理则会继续往上传递;一直传递到视图控制器view

    11.4K70
    领券