IOS 的 7 中手势的介绍 和详细使用(UIGestureRecognizer) UIScreenEdgePanGestureRecognizer
来源:互联网 发布:苹果免费打电话软件 编辑:程序博客网 时间:2024/05/16 12:39
在IOS的开发中,手势也是一个常常使用的,在上几年面试的时候,也会问到关于手势的问题。 IOS开发有多少手势呢?开发一共有 6中手势(不包含,其他衍生手势例如:UIScreenEdgePanGestureRecognizer) 他们都是集成与 UIGestureRecognizer
第一步:效果图。
第二部:我们做变量和宏的定义。
//
// Variable.h
// Gesture_All
//
// Created by 周双建 on 15/12/25.
// Copyright © 2015年周双建. All rights reserved.
//
#define USERINTERACTION YES
// 使用枚举
typedef enum {
Tap = 0,
Pan,
Pin,
Swip,
LPG,
Rota
} Which_Gesture;
#define ALERT UIAlertController * Alerat_C = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"你敢戳我" preferredStyle:UIAlertControllerStyleAlert];\
UIAlertAction * Action = [UIAlertAction actionWithTitle:@"干掉你" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {\
[Alerat_C dismissViewControllerAnimated:YES completion:nil];\
}];\
[Alerat_C addAction:Action];\
[self presentViewController:Alerat_C animated:YES completion:nil];
#define ALERT_DisMiss(Message) \
UIAlertController * Alerat_C = [UIAlertController alertControllerWithTitle:@"温馨提示" message:Message preferredStyle:UIAlertControllerStyleAlert];\
[self presentViewController:Alerat_C animated:YES completion:^{\
dispatch_after(2, dispatch_get_main_queue(), ^{\
[Alerat_C dismissViewControllerAnimated:YES completion:nil];\
});\
}];
/* 《IOS的手势集合和详细使用》*/
/*
* 在IOS的开发中,手势也是一个常常使用的,在上几年面试的时候,也会问到关于手势的问题。
* IOS 开发有多少手势呢?开发一共有 6 中手势(不包含,其他衍生手势 例如:UIScreenEdgePanGestureRecognizer ) 他们都是集成与 UIGestureRecognizer,分别是:
*
* UITapGestureRecognizer 是单击(或者说是轻击手势)
*
* UIPanGestureRecognizer 是拖拽手势
*
* UIPinchGestureRecognizer 是捏合手势
*
* UISwipeGestureRecognizer 是轻扫手势
*
* UILongPressGestureRecognizer 是长安手势
*
* UIRotationGestureRecognizer 是旋转手势
*
*/
// Created by 周双建 on 15/12/25.
// Copyright © 2015年周双建. All rights reserved.
//
#import "ViewController.h"
#import "Variable.h"
// 设置所有手势的代理
@interface ViewController ()<UIGestureRecognizerDelegate>
//声明主要控件
@property(nonatomic,strong)UIImageView * Root_IMV;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
// 今天我们的主角是一个ImageView,初始化
self.Root_IMV = [[UIImageViewalloc]initWithFrame:CGRectMake(self.view.center.x-200,self.view.center.y-200,400, 400)];
//打开交互
self.Root_IMV.userInteractionEnabled =USERINTERACTION;
// 给主角添加,美化、
self.Root_IMV.image = [UIImageimageNamed:@"u=3883044849,3921323255&fm=21&gp=0.jpg"];
// 对图片简单处理
self.Root_IMV.contentMode = UIViewContentModeScaleAspectFit;
// 显示出来
[self.viewaddSubview:_Root_IMV];
// 开始添加手势
[self start];
// Do any additional setup after loading the view, typically from a nib.
}
-(void)start{
// 轻击手势 ,创建和初始化
/*
* UITapGestureRecognizer的其他参数
*
* numberOfTapsRequired 是设置你连续点击几次,在发起响应(这个无论你允许几个手指点击)
*
* numberOfTouchesRequired 是设置几个手指去点击才能响应
*
*/
UITapGestureRecognizer * TapGestureRecognizer = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(TapGestureRecognizerClick:)];
// 设置连续点击几次,在发起响应
TapGestureRecognizer.numberOfTapsRequired =2 ;
// 这个是设置几个手指去点击,才能发起响应注意:模拟器不能检测手指数(电脑的触控板)
TapGestureRecognizer.numberOfTouchesRequired =1;
// 将手势添加到图片上
[_Root_IMV addGestureRecognizer:TapGestureRecognizer];
/*************************************************************************/
/*
*
* UIPanGestureRecognizer 参数和方法的介绍
*
* minimumNumberOfTouches 设置最少使用手指的个数 进行拖拽
*
* maximumNumberOfTouches 设置最大使用手指的个数 进行拖拽
*
*
*
*/
UIPanGestureRecognizer * PanGestureRecognizer = [[UIPanGestureRecognizeralloc]initWithTarget:selfaction:@selector(PanGestureRecognizerClick:)];
// 最少,手指数
PanGestureRecognizer.minimumNumberOfTouches =2;
// 最多,手指数
PanGestureRecognizer.maximumNumberOfTouches =3;
// 添加到主角上
[_Root_IMV addGestureRecognizer:PanGestureRecognizer];
/************************************************************************/
/*
* direction 是设置你轻扫的方向
*/
UISwipeGestureRecognizer * SwipeGestureRecognizer = [[UISwipeGestureRecognizeralloc]initWithTarget:selfaction:@selector(SwipeGestureRecognizerClick:)];
// 方向不设置,默认是向右
SwipeGestureRecognizer.direction =UISwipeGestureRecognizerDirectionDown;
[_Root_IMV addGestureRecognizer:SwipeGestureRecognizer];
/************************************************************************/
/*
* minimumPressDuration 设置你长按的最小时间
* allowableMovement 这是当长按时间 达到最小时间后,必须在移动15像素才能出发事件
*/
UILongPressGestureRecognizer * LongPressGestureRecognizer = [[UILongPressGestureRecognizeralloc]initWithTarget:selfaction:@selector(LongPressGestureRecognizerClick:)];
// 设置长按的最小时间
LongPressGestureRecognizer.minimumPressDuration =3;
// 这是当长按时间达到最小时间后,必须在移动15像素才能出发事件(默认 为 10)
LongPressGestureRecognizer.allowableMovement =15;
// 添加手势
[_Root_IMV addGestureRecognizer:LongPressGestureRecognizer];
/***************************************************************************/
/*
* velocity 旋转的速度
*
* rotation 旋转的角度
*
*/
UIRotationGestureRecognizer * RotationGestureRecognizer = [[UIRotationGestureRecognizeralloc]initWithTarget:selfaction:@selector(RotationGestureRecognizerClick:)];
[_Root_IMV addGestureRecognizer:RotationGestureRecognizer];
/****************************************************************************/
/*
* scale 捏合放大的比例
*
* velocity 捏合速度
*/
UIPinchGestureRecognizer * PinchGestureRecognizer = [[UIPinchGestureRecognizeralloc]initWithTarget:selfaction:@selector(PinchGestureRecognizerClick:)];
[_Root_IMV addGestureRecognizer:PinchGestureRecognizer];
/*****************************************************************/
// 还可以设置手势的响应顺序
[PanGestureRecognizer requireGestureRecognizerToFail:SwipeGestureRecognizer];
/*SwipeGestureRecognizer 必须失败后,PanGestureRecognizer 才能触发 */
}
// 实现轻击手势的响应
-(void)TapGestureRecognizerClick:(UITapGestureRecognizer*)Tap{
ALERT;
}
// 实现拖拽的手势
-(void)PanGestureRecognizerClick:(UIPanGestureRecognizer*)Pan{
CGPoint P = [Pan translationInView:_Root_IMV];
// 对 translationInView 我做个解释
/*
* translationInView 是获取你拖拽的以你开始拖拽点为坐标圆点的点。
* 它将以你开始拖拽点为原点,将可触动的区域划分为四个象限。(坐标的正负和数学相同)
*/
/*
* Pan.view.center 是你开始可触动区域的中心点。(是以控制器为坐标圆点)
*
*/
CGFloat x = Pan.view.center.x + P.x;
CGFloat y = Pan.view.center.y + P.y;
// 计算出,拖拽后的中心点(注意:坐标圆点)
Pan.view.center =CGPointMake(x, y);
// 设置拖拽后,结束点,否者对象已经跑道很远的地方了
[Pan setTranslation:CGPointMake(0,0) inView:_Root_IMV];
}
// 轻扫手势
-(void)SwipeGestureRecognizerClick:(UISwipeGestureRecognizer*)Swip{
ALERT_DisMiss(Swip.description);
}
// 长按手势
-(void)LongPressGestureRecognizerClick:(UILongPressGestureRecognizer*)LPG{
ALERT_DisMiss(@"压死宝宝了");
}
// 旋转手势
-(void)RotationGestureRecognizerClick:(UIRotationGestureRecognizer*)Rotation{
ALERT_DisMiss(@"转起来");
CGAffineTransform Transform = CGAffineTransformMakeRotation(Rotation.rotation);
_Root_IMV.transform = Transform;
}
// 捏合手势
-(void)PinchGestureRecognizerClick:(UIPinchGestureRecognizer*)pin{
ALERT_DisMiss(@"我变大");
CGAffineTransform Transform = CGAffineTransformMakeScale(pin.scale, pin.scale);
_Root_IMV.transform = Transform;
}
/****************************************************************************/
// 代理方法
// 是否允许当前手势失败,另一个手势响应
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
// 手势开始之前就获得手势
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
return YES;
}
//允许多个手势响应
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
- IOS 的 7 中手势的介绍 和详细使用(UIGestureRecognizer) UIScreenEdgePanGestureRecognizer
- iOS手势UIGestureRecognizer识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
- (转)iOS手势UIGestureRecognizer识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
- iOS UIGestureRecognizer (手势的基本知识介绍)
- iOS UIGestureRecognizer (手势的基本知识介绍)
- IOS 中使用的手势 ,用到的类UIGestureRecognizer
- UI: UIGestureRecognizer IOS中手势的用法
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- 使用iOS手势UIGestureRecognizer
- iOS---如何把导航默认的返回按钮设置成“返回”
- C/C++面试题精选
- PHP+MySQL的操作
- UIGestureRecognizer手势识别详解
- List接口、ArrayList类和LinkedList类 笔记
- IOS 的 7 中手势的介绍 和详细使用(UIGestureRecognizer) UIScreenEdgePanGestureRecognizer
- centos6.4安装mysql5.5
- C算法--堆排序
- CFileDialog类无故崩溃的解决及原因分析
- Hive远程模式安装
- 如何快速正确的安装 Ruby, Rails 运行环境
- 数据结构课程设计-学生信息管理系统
- 浏览器通过下载来下载文件
- filter 过滤器用户登录并判断是否属于电脑端或者手机端访问