美文网首页
iOS开发-UIGestureRecognizer&抽屉效果

iOS开发-UIGestureRecognizer&抽屉效果

作者: iOS_ZZ | 来源:发表于2018-02-06 15:22 被阅读0次

各位同学今天给大家带来如下内容那么废话不多说,直接上代码

  • 手势识别-UIGestureRecognizer
  • 抽屉效果

手势识别-UIGestureRecognizer

  • 为了完成手势识别,必须借助于手势识别器---UIGestureRecognizer
  • 利用UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势
UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势
UITapGestureRecognizer(敲击)
UIPinchGestureRecognizer(捏合,用于缩放)
UIPanGestureRecognizer(拖拽)
UISwipeGestureRecognizer(轻扫)
UIRotationGestureRecognizer(旋转)
UILongPressGestureRecognizer(长按)
  • 每一个手势识别器的用法都差不多,比如UITapGestureRecognizer的使用步骤如下:
创建手势识别器对象
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];

#pragma mark - 设置手势识别器对象的具体属性
// 连续敲击2次
tap.numberOfTapsRequired = 2;

// 需要2根手指一起敲击
tap.numberOfTouchesRequired = 2;

添加手势识别器到对应的view上
[self.iconView addGestureRecognizer:tap];

监听手势的触发
[tap addTarget:self action:@selector(tapIconView:)];
  • 手势识别的状态
typedef NS_ENUM(NSInteger, UIGestureRecognizerState) {
// 没有触摸事件发生,所有手势识别的默认状态
UIGestureRecognizerStatePossible,
// 一个手势已经开始但尚未改变或者完成时
UIGestureRecognizerStateBegan,
// 手势状态改变
UIGestureRecognizerStateChanged,
// 手势完成
UIGestureRecognizerStateEnded,
// 手势取消,恢复至Possible状态
UIGestureRecognizerStateCancelled,
// 手势失败,恢复至Possible状态
UIGestureRecognizerStateFailed,
// 识别到手势识别
UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded
};
  • 手势识别状态变化示意图


    手势识别状态变化示意图
  • 使用UIImageView原因:之前既能看见图片,又能监听点击的只有UIButton,学了手势,我们的UIImageView也可以。
  • tap(代理:左边不能点,右边能点)
  • longPress(allowableMovement:触发之前,最大的移动范围)
  • 默认调用两次,开始一次,结束一次。
  • swipe:(一个手势只能识别一个方向)
  • 旋转:
  • 基于上一次旋转注意:通过transform形变,需要去掉autolayout,才准确
  • 复位:(手势的取值都是相对最原始的位置,我们应该是需要相对上一次,因此每次调用,就复位一下,每次都是从零开始旋转角度)
  • 缩放:复位
  • 如何同时支持旋转和缩放?默认不支持多个手指
  • Simultaneously
  • 同时当使用一个手势的时候会调用代理的Simultaneously方法,询问是否支持多个手势
  • pan
  • 获取平移的位置:translationInView
  • 复位:setTranslation:inView: 需要传一个view,因为点的位置跟坐标系有关系,看他是基于哪个坐标系被清空的。

抽屉效果

  • 简单的滑动效果
  • 监听控制器处理事件方法
  • 获取x轴偏移量
  • 改变主视图的frame
  • 利用KVO做视图切换
  • 往左移动,显示右边,隐藏左边
  • 往右移动,显示左边,隐藏右边
  • 复杂的滑动效果
  • (根据手指每移动一点,x轴的偏移量算出当前视图的frame)
假设x移到320时,y移动到60,算出每移动一点x,移动多少y
offsetY = offsetX * 60 / 320 手指每移动一点,x轴偏移量多少,y偏移多少
为了好看,x移动到320,距离上下的高度需要保持一致,而且有一定的比例去缩放他的尺寸。
怎么根据之前的frame,算出当前的frame,touchMove只能拿到之前的frame.
当前的高度 = 之前的高度 * 这个比例
缩放比例:当前的高度/之前的高度 (screenH - 2 * offsetY) / screenH
当前的宽度也一样求。
y值,计算比较特殊,不能直接用之前的y,加上offsetY,往左滑动,主视图应该往下走,但是offsetX是负数,导致主视图会往上走。
y = (screenH - 当前的高度)* 0.5
getCurrentFrameWithOffsetX
定位(滑动松开手指的时候,移动到目标点)
移动到左右目标点,根据偏移量 = 当前目标点的x - 之前视图的x,计算移动到目标点的frame
还原:当没有移动到目标点,就把主视图还原。
复位(当主视图不在原始的位置,点击屏幕,恢复原来位置)
判断手指是否移动,移动的时候就自动定位,不需要手动复位。

相关文章

  • iOS开发-UIGestureRecognizer&抽屉效果

    各位同学今天给大家带来如下内容那么废话不多说,直接上代码 手势识别-UIGestureRecognizer 抽屉效...

  • iOS开发-抽屉效果

    抽屉效果以前比较多,现在看到的比较少,手Q和今日头条现在侧边滑动通过抽屉的方式实现,关于第三方的抽屉效果有很多,稍...

  • iOS 抽屉效果

    效果图 平时开发中经常会用到抽屉效果,关于抽屉的实现有许多三方库,读者可以根据需要选用,本节内容主要简单的实现一个...

  • iOS 抽屉效果

    抽屉效果思路: 三个View叠加,一个作为左View,一个作为右View,一个主View,在主View上添加拖动手...

  • iOS抽屉效果

    我们在用QQ时都会发现,消息列表向左滑动时,左侧的功能界面被显示出来,消息列表会拉到最右侧, 就像一个抽屉拉出来一...

  • ios抽屉效果

    #import @interfaceDragViewController :UIViewController @p...

  • IOS开发之——事件处理-抽屉效果

    文章搬运来源:https://blog.csdn.net/Calvin_zhou/article/details/...

  • iOS 功能及效果实现 格式说明

    本文集收录大家在iOS项目开发中遇到的功能( 地图 , 分享等 )及效果( 抽屉, 下拉刷新等 )方面的解决方案....

  • iOS开发--抽屉

    抽屉效果的实现: 首先是写一个自定义UIView,在这个自定义View上添加一个UITableView,UITab...

  • iOS 抽屉效果 ViewDeck

    抽屉效果目前比较有名的有第三方RESideMenu和MMDrawerController。但是项目要求抽屉效果为拉...

网友评论

      本文标题:iOS开发-UIGestureRecognizer&抽屉效果

      本文链接:https://www.haomeiwen.com/subject/rtmgzxtx.html