手势图的设计原理(1)建立、开始、移动、结束、点击、长按
2015-12-29 17:33
411 查看
[b]ViewController.m[/b]
/*
手势:
UIResponder:是一个响应者(传达者) 用来响应 用户触摸屏幕的某些事件
// 手指开始触摸屏幕调用
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
时间戳
点击次数
可以获得点击视图的位置*******
- (CGPoint)locationInView:(nullable UIView *)view;
// 手指触摸屏幕开始移动
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
// 手指离开屏幕的时候调用
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
// 手指因外部事件 取消触摸的时候调用
- (void)touchesCancelled:(nullable NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
手势不调用 检查时候设置了背景颜色
手势又分为六大手势:
六大手势 全部都继承自 UIGestureRecognizer
1、点击 UITapGestureRecognizer
2、长按 UILongPressGestureRecognizer
3、拖拽 UIPanGestureRecognizer
4、捏合 UIPinchGestureRecognizer
5、轻扫 UISwipeGestureRecognizer
6、旋转 UIRotationGestureRecognizer
touchesBegan moved end(鼠标开始、移动、结束)
可以通过touches 获得某个触摸事件
UITouch *touch = [touches anyObjects];
可以通过UITouch 获得触摸的点的位置
*/
#import "ViewController.h"
@interface ViewController ()
{
UIImageView *imageView;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
imageView.image = [UIImage imageNamed:@"fly_1"];
[self.view addSubview:imageView];
imageView.animationImages = @[[UIImage imageNamed:@"fly_1"],[UIImage imageNamed:@"fly_2"],[UIImage imageNamed:@"fly_3"],[UIImage imageNamed:@"fly_4"]];
imageView.animationDuration = 1;
//UIGestureRecognizer
//初始化手势
//- (instancetype)initWithTarget:(nullable id)target action:(nullable SEL)action;
//UIView 中有添加手势的方法
//addGestureRecognizer:
//可以通过手势里面的view属性找到点击的视图
//locationInView:找到点击的位置
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(actionOfTap:)];
//设置手势点击的点击次数(才会移动)
tap.numberOfTapsRequired = 2;
//设置点击手指的个数
//tap.numberOfTouchesRequired = 2;
[self.view addGestureRecognizer:tap];
//长按手势
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(actionOfLongPress:)];
//设置长按的时间
longPress.minimumPressDuration = 3;
[self.view addGestureRecognizer:longPress];
}
/*
typedef NS_ENUM(NSInteger, UIGestureRecognizerState) {
UIGestureRecognizerStatePossible, 默认状态UIGestureRecognizerStateBegan, 手势开始
UIGestureRecognizerStateChanged, 手势发生改变
UIGestureRecognizerStateEnded, 手势结束
UIGestureRecognizerStateCancelled, 手势被取消状态
UIGestureRecognizerStateFailed, 手势失败的状态
};
*/
//要想获得这些状态可以使用 state ->状态
//点击手势
-(void)actionOfTap:(UITapGestureRecognizer *)sender{
// UIView *view = sender.view;
// view.backgroundColor = [UIColor redColor];
CGPoint point = [sender locationInView:self.view];
// imageView.center = point;(已删除)
//让视图从原始状态到animations里面的状态用2秒执行完
//补间动画(只会让视图随着光标的点击而移动,不会变换他的大小形态)
// [UIView animateWithDuration:2 animations:^{
// imageView.center = point;
// }];
//不仅可以让视图随着光标的移动而移动,也可以在移动的途中和移动结束之后变换形态大小
[UIView animateWithDuration:2 animations:^{
imageView.center = point;
imageView.bounds = CGRectMake(0, 0, 200, 200);
} completion:^(BOOL finished) {
//动画完成之后调用
[UIView animateWithDuration:2 animations:^{
imageView.bounds = CGRectMake(0, 0, 100, 100);
}];//会从原始默认状态 到animations里面状态 用2秒钟执行完
}];
/*
UIView动画
系统帮咱们封装了 核心动画
//设置动画的持续时间(Duratation)和动画
[UIView animateWithDuration:1 animations:^{
}];
//completion 动画完成之后调用的方法
[UIView animateWithDuration:1 animations:^{
} completion:^(BOOL finished) {
}];
*/
}
//长按实现方法
-(void)actionOfLongPress:(UILongPressGestureRecognizer *)sender{
if (sender.state == UIGestureRecognizerStateBegan) {
imageView.bounds = CGRectMake(0, 0, 200, 200);
NSLog(@"放大了~");
}
if (sender.state == UIGestureRecognizerStateEnded) {
imageView.bounds = CGRectMake(0, 0, 100, 100);
NSLog(@"还原了~");
}
}
//- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)even
//{
// //locationInView:UITouch找到点击视图的某一个点
// //anyObject 可以获得touches集合里面某一个touch事件
// UITouch *touch = [touches anyObject];
// //找到触摸视图上面的触摸点
// CGPoint point = [touch locationInView:self.view];
// NSLog(@"x:%f y:%f",point.x,point.y);
//
// //让图片随着鼠标光标的移动而移动
// imageView.center = point;
//
// [imageView startAnimating];
//
//}
//
//// 手指触摸屏幕开始移动
//- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event
//{
// UITouch *touch = [touches anyObject];
// CGPoint point = [touch locationInView:self.view];
// imageView.center = point;
//
//
//}
//// 手指离开屏幕的时候调用
//- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event
//{
//
// [imageView stopAnimating];
//}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
/*
用户点击屏幕触发 -> 所有视图都继承UIResponder->UITuchBegin moved end
UITuchBegin moved end
1、获得点击的touch事件
UITouch *touch = [touches anyObject]
2、获得用户点击的位置
CGPoint point = [touch locationInView:XX];
UIGestureRecognizer:
所有手势都是通过 初始化
- (instancetype)initWithTarget:(nullable id)target action:(nullable SEL)action
把手势添加到视图上
[xx视图 addGestureRecognizer:xx手势];
可以通过手势 获得触摸的视图
view这个属性获得
获得点击视图的位置
CGPoint point = [xx手势 locationInView:xx视图];
1、点击手势
UITapGestureRecognizer
numberOfTapsRequired: 设置点击的次数
numberOfTouchesRequired: 设置点击手指的个数
2、UILongPressGestureRecognizer
minimumPressDuration: 设置长按的最小持续时间 会在长按的持续时间之后执行触发事件
UIView动画
在动画里面 更改视图的属性 产生动画效果
[UIView animateWithDuration:时间 animations:^{
要更改的属性 -> 会产生一个 在设置时间之后 执行完成的一个动画效果
}];
[UIView animateWithDuration:时间 animations:^{
要更改的属性 -> 会产生一个 在设置时间之后 执行完成的一个动画效果
} completion^(BOOL){
当动画执行完毕之后调用
}];
*/
}
@end
/*
手势:
UIResponder:是一个响应者(传达者) 用来响应 用户触摸屏幕的某些事件
// 手指开始触摸屏幕调用
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
时间戳
点击次数
可以获得点击视图的位置*******
- (CGPoint)locationInView:(nullable UIView *)view;
// 手指触摸屏幕开始移动
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
// 手指离开屏幕的时候调用
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
// 手指因外部事件 取消触摸的时候调用
- (void)touchesCancelled:(nullable NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event;
手势不调用 检查时候设置了背景颜色
手势又分为六大手势:
六大手势 全部都继承自 UIGestureRecognizer
1、点击 UITapGestureRecognizer
2、长按 UILongPressGestureRecognizer
3、拖拽 UIPanGestureRecognizer
4、捏合 UIPinchGestureRecognizer
5、轻扫 UISwipeGestureRecognizer
6、旋转 UIRotationGestureRecognizer
touchesBegan moved end(鼠标开始、移动、结束)
可以通过touches 获得某个触摸事件
UITouch *touch = [touches anyObjects];
可以通过UITouch 获得触摸的点的位置
*/
#import "ViewController.h"
@interface ViewController ()
{
UIImageView *imageView;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
imageView.image = [UIImage imageNamed:@"fly_1"];
[self.view addSubview:imageView];
imageView.animationImages = @[[UIImage imageNamed:@"fly_1"],[UIImage imageNamed:@"fly_2"],[UIImage imageNamed:@"fly_3"],[UIImage imageNamed:@"fly_4"]];
imageView.animationDuration = 1;
//UIGestureRecognizer
//初始化手势
//- (instancetype)initWithTarget:(nullable id)target action:(nullable SEL)action;
//UIView 中有添加手势的方法
//addGestureRecognizer:
//可以通过手势里面的view属性找到点击的视图
//locationInView:找到点击的位置
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(actionOfTap:)];
//设置手势点击的点击次数(才会移动)
tap.numberOfTapsRequired = 2;
//设置点击手指的个数
//tap.numberOfTouchesRequired = 2;
[self.view addGestureRecognizer:tap];
//长按手势
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(actionOfLongPress:)];
//设置长按的时间
longPress.minimumPressDuration = 3;
[self.view addGestureRecognizer:longPress];
}
/*
typedef NS_ENUM(NSInteger, UIGestureRecognizerState) {
UIGestureRecognizerStatePossible, 默认状态UIGestureRecognizerStateBegan, 手势开始
UIGestureRecognizerStateChanged, 手势发生改变
UIGestureRecognizerStateEnded, 手势结束
UIGestureRecognizerStateCancelled, 手势被取消状态
UIGestureRecognizerStateFailed, 手势失败的状态
};
*/
//要想获得这些状态可以使用 state ->状态
//点击手势
-(void)actionOfTap:(UITapGestureRecognizer *)sender{
// UIView *view = sender.view;
// view.backgroundColor = [UIColor redColor];
CGPoint point = [sender locationInView:self.view];
// imageView.center = point;(已删除)
//让视图从原始状态到animations里面的状态用2秒执行完
//补间动画(只会让视图随着光标的点击而移动,不会变换他的大小形态)
// [UIView animateWithDuration:2 animations:^{
// imageView.center = point;
// }];
//不仅可以让视图随着光标的移动而移动,也可以在移动的途中和移动结束之后变换形态大小
[UIView animateWithDuration:2 animations:^{
imageView.center = point;
imageView.bounds = CGRectMake(0, 0, 200, 200);
} completion:^(BOOL finished) {
//动画完成之后调用
[UIView animateWithDuration:2 animations:^{
imageView.bounds = CGRectMake(0, 0, 100, 100);
}];//会从原始默认状态 到animations里面状态 用2秒钟执行完
}];
/*
UIView动画
系统帮咱们封装了 核心动画
//设置动画的持续时间(Duratation)和动画
[UIView animateWithDuration:1 animations:^{
}];
//completion 动画完成之后调用的方法
[UIView animateWithDuration:1 animations:^{
} completion:^(BOOL finished) {
}];
*/
}
//长按实现方法
-(void)actionOfLongPress:(UILongPressGestureRecognizer *)sender{
if (sender.state == UIGestureRecognizerStateBegan) {
imageView.bounds = CGRectMake(0, 0, 200, 200);
NSLog(@"放大了~");
}
if (sender.state == UIGestureRecognizerStateEnded) {
imageView.bounds = CGRectMake(0, 0, 100, 100);
NSLog(@"还原了~");
}
}
//- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)even
//{
// //locationInView:UITouch找到点击视图的某一个点
// //anyObject 可以获得touches集合里面某一个touch事件
// UITouch *touch = [touches anyObject];
// //找到触摸视图上面的触摸点
// CGPoint point = [touch locationInView:self.view];
// NSLog(@"x:%f y:%f",point.x,point.y);
//
// //让图片随着鼠标光标的移动而移动
// imageView.center = point;
//
// [imageView startAnimating];
//
//}
//
//// 手指触摸屏幕开始移动
//- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event
//{
// UITouch *touch = [touches anyObject];
// CGPoint point = [touch locationInView:self.view];
// imageView.center = point;
//
//
//}
//// 手指离开屏幕的时候调用
//- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event
//{
//
// [imageView stopAnimating];
//}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
/*
用户点击屏幕触发 -> 所有视图都继承UIResponder->UITuchBegin moved end
UITuchBegin moved end
1、获得点击的touch事件
UITouch *touch = [touches anyObject]
2、获得用户点击的位置
CGPoint point = [touch locationInView:XX];
UIGestureRecognizer:
所有手势都是通过 初始化
- (instancetype)initWithTarget:(nullable id)target action:(nullable SEL)action
把手势添加到视图上
[xx视图 addGestureRecognizer:xx手势];
可以通过手势 获得触摸的视图
view这个属性获得
获得点击视图的位置
CGPoint point = [xx手势 locationInView:xx视图];
1、点击手势
UITapGestureRecognizer
numberOfTapsRequired: 设置点击的次数
numberOfTouchesRequired: 设置点击手指的个数
2、UILongPressGestureRecognizer
minimumPressDuration: 设置长按的最小持续时间 会在长按的持续时间之后执行触发事件
UIView动画
在动画里面 更改视图的属性 产生动画效果
[UIView animateWithDuration:时间 animations:^{
要更改的属性 -> 会产生一个 在设置时间之后 执行完成的一个动画效果
}];
[UIView animateWithDuration:时间 animations:^{
要更改的属性 -> 会产生一个 在设置时间之后 执行完成的一个动画效果
} completion^(BOOL){
当动画执行完毕之后调用
}];
*/
}
@end
相关文章推荐
- 深浅拷贝的应用-copy、mutableCopy
- [.NET源码] C#制作的一套在线更新软件系统
- AngularJs基础——过滤器
- MVC框架详解--Servlet+JSP+JavaBean模式(MVC)开发复杂的web应用
- 万能js实现翻页,动态生成内容自动翻页,兼容各种浏览器(已测试)----神器版!
- R语言实战
- 如何确定Ubuntu下是否对某个CVE打了补丁
- 思杰成为ADC领域在Container容器中提供其产品的第一家主要厂商
- 正则表达式:匹配任意字符
- 关于struts页面数字的格式化
- 获取WebView加载HTML时网页中的内容
- 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&amp;&amp;bzoj 2820 YY的GCD&amp;&amp;BZOJ 3529 数表)
- 文件夹树
- Git使用教程
- Python实现抓取糗事百科的段子
- linux2--ssh secure shell client
- iOS消息推送机制的实现
- iOS 第三方库汇总(超全!!!!)
- apache的url_rewrite地址重写中得到问号后面的参数
- __attribute__ ((__packed__)) 编译通不过