手势的应用

Main.storyboard

1.敲击手势

ViewController.m

#import "ViewController.h"

@interface ViewController ()<UIGestureRecognizerDelegate>

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

//1.创建一个“敲击手势”对象

UITapGestureRecognizer *tapGest = [[UITapGestureRecognizer alloc] init];

//2.创建“敲击手势”对象的属性

//点击的次数

tapGest.numberOfTapsRequired = 1;

//手指的数量

//    tapGest.numberOfTouchesRequired = 2;

//设置代理

tapGest.delegate = self;

//3.把手势添加到view上

[self.imageView addGestureRecognizer:tapGest];

//4.设置手势的监听方法

[tapGest addTarget:self action:@selector(tapView:)];

}

-(void)tapView:(UITapGestureRecognizer *)tapGest

{

NSLog(@"%s", __func__);

}

#pragma mark 手势的代理

//告诉view能否接收“触摸事件”

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{

//左边可以 点击/右边不可以

CGPoint location = [touch locationInView:touch.view];

if (location.x <= touch.view.bounds.size.width * 0.5) {

return YES;

}

return NO;

}

@end

2.长按手势

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

//给图片添加 “长按手势” 对象

//1.创建一个"长按手势"对象

UILongPressGestureRecognizer *longGest = [[UILongPressGestureRecognizer alloc] init];

//属性

//长按的时间

longGest.minimumPressDuration = 3;

//长按是,距离“触摸点”可移动的距离

longGest.allowableMovement = 30;

//2.把手势添加到view上

[self.imageView addGestureRecognizer:longGest];

//3.设置手势的监听方法

[longGest addTarget:self action:@selector(longPressView:)];

}

-(void)longPressView:(UILongPressGestureRecognizer *)longPressGest{

//怎么判断“长按” 开始和结束

NSLog(@"%s 手势状态 %ld",  __func__, longPressGest.state);

if (longPressGest.state == UIGestureRecognizerStateBegan) {

NSLog(@"长按手势开始");

}else{

NSLog(@"长按手势结束");

}

}

@end

3.轻扫手势

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

//给图片添加 “轻扫手势” 对象

//1.创建一个"轻扫手势"对象

UISwipeGestureRecognizer *swipeGest = [[UISwipeGestureRecognizer alloc] init];

//属性

swipeGest.direction = UISwipeGestureRecognizerDirectionRight;//默认方向

//    UISwipeGestureRecognizerDirectionRight = 1 << 0,向右轻扫

//    UISwipeGestureRecognizerDirectionLeft  = 1 << 1,向左轻扫

//    UISwipeGestureRecognizerDirectionUp    = 1 << 2,向上轻扫

//    UISwipeGestureRecognizerDirectionDown  = 1 << 3,向下

//2.把手势添加到view上

[self.imageView addGestureRecognizer:swipeGest];

//3.设置手势的监听方法

[swipeGest addTarget:self action:@selector(swipeGestView:)];

}

-(void)swipeGestView:(UISwipeGestureRecognizer *)swipeGest{

//“轻扫” 的状态不需要判断,因为只有结束状态。 只有“长按”的状态去判断。

NSLog(@"%s 手势状态 %ld",  __func__, swipeGest.state);

//    if (swipeGest.state == UIGestureRecognizerStateBegan) {

//        NSLog(@"轻扫手势开始");

//    }else{

//        NSLog(@"轻扫手势结束");

//    }

}

4.捏合手势

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

/**

* 默认情况下,控制只能 监听到一种手势

* 如果要监听到多个手势,设置一个代理的方法,告知它允许“多个手势”并存

*/

//给图片添加 “捏合手势” 对象

//1.创建一个"捏合手势"对象

UIPinchGestureRecognizer *pinchGest = [[UIPinchGestureRecognizer alloc] init];

//属性

//2.把手势添加到view上

[self.imageView addGestureRecognizer:pinchGest];

//3.设置手势的监听方法

[pinchGest addTarget:self action:@selector(pinchGestView:)];

}

-(void)pinchGestView:(UIPinchGestureRecognizer *)pinchGest{

//缩放的比例是一个“累加”的过程

NSLog(@"%s 缩放的比例 %f", __func__,pinchGest.scale);

//设置图片的缩放

//10*10 / 1.0

//10*2.01*10*2.01/1.01+1.0 = 2.01

//10*2.01*3.03 *10*2.01*3.03 /1.02 +2.01 = 3.03

#warning 放大图片后,再次缩放的时候,马上回到原先的大小

//    self.imageView.transform = CGAffineTransformMakeScale(pinchGest.scale, pinchGest.scale);

self.imageView.transform = CGAffineTransformScale(self.imageView.transform, pinchGest.scale, pinchGest.scale);

//让比例还原,不要累加

//解决办法,重新设置scale 图片就不会消失

pinchGest.scale = 1;

}

5.旋转手势

ViewController.m

#import "ViewController.h"

@interface ViewController ()<UIGestureRecognizerDelegate>

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

//给图片添加“旋转手势”对象

//1.创建一个“旋转手势”对象

UIRotationGestureRecognizer *rotationGest = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationView:)];

//属性

//设置代理

rotationGest.delegate = self;

//2.把手势添加到view上

[self.imageView addGestureRecognizer:rotationGest];

//给图片添加“捏合手势”

UIPinchGestureRecognizer *pinchGest = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchView:)];

[self.imageView addGestureRecognizer:pinchGest];

}

-(void)rotationView:(UIRotationGestureRecognizer *)rotationGest{

//旋转角度

//旋转的角度也是一个累加的过程

NSLog(@"旋转角度%f", rotationGest.rotation);

//设置图片的旋转

self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, rotationGest.rotation);

//    //清除“旋转角度”的累加

rotationGest.rotation = 0;

}

-(void)pinchView:(UIPinchGestureRecognizer *)pinchGest{

//设置图片

self.imageView.transform = CGAffineTransformScale(self.imageView.transform, pinchGest.scale, pinchGest.scale);

//还原

pinchGest.scale = 1;

}

#pragma mark 手势代理

//Simultaneous 同时发生

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{

return YES;

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

6.拖曳手势

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

//给图片添加“拖拽手势”

//1.创建一个"拖拽手势"对象

//    UIPanGestureRecognizer *panGest = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panView:)];

//    //添加手势

//    [self.imageView addGestureRecognizer:panGest];

}

-(IBAction)panView:(UIPanGestureRecognizer *)panGest{

//方法

//panGest.view触摸的view

//拖拽的距离 累加的过程 获取的是距离

CGPoint trans =[panGest translationInView:panGest.view];

NSLog(@"%@", NSStringFromCGPoint(trans));

//设置图片移动

CGPoint center = self.imageView.center;

center.x += trans.x;

center.y += trans.y;

self.imageView.center = center;

//清除添加

[panGest setTranslation:CGPointZero inView:panGest.view];

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

上面几种方法都是用代码写,现在用Main.storyboard

就是在图片上添加手势,前提是,图片是可交互的

时间: 2024-08-24 17:49:57

手势的应用的相关文章

vue手势解决方案

1.需求 因为项目中要做一个可以移动.旋转和放缩具有合成图片的功能,例如: 剑可以随意移动,然后把位移.旋转角度和放缩值传给后台进行合成. 2.解决方案 网上搜到手势插件AlloyFinger,https://github.com/AlloyTeam/AlloyFinger 首先安装AlloyFinger:npm install alloyfinger 然后在Vue文件里面引用:import AlloyFinger from 'alloyfinger' 使用方法: mounted() { thi

手势事件

1.基本的手势事件主要有如下三个方法: dispatchTouchEvent : 判断该事件是否需要下发.返回true表示需要下发给下级视图,返回false表示不需要下发(交给自身的onTouchEvent处理).但是否最终下发,还需根据onInterceptTouchEvent的拦截结果. onInterceptTouchEvent : 判断当前容器是否需要拦截该事件.返回true表示予以拦截(交给自身的onTouchEvent处理).不放给下级视图,返回false表示不拦截该事件. onTo

【Bootstrap】3.优化站点资源、完成响应式图片、让传送带支持手势

A.优化站点资源 速度很重要.用户很关心.我们的站点必须加载够快,否则用户就会走人.SEO 也很重要.我们的站点必须加载够快,否者搜索排名就会下降. 明白了这样,我们就来清点一下 [Bootstrap]2.作品展示站点 中的资源.特别的,来看一看我们能控制的.影响页面速度的重要因素 —— 文件大小,包括图片.CSS和 JavaScript 文件.只要简单几步,我们就可以给这些文件“瘦身”,缩短加载时间. A.1 优化图片 这些图片都通过 Photoshop 的 “保存为 Web 格式” 进行了一

Android官方开发文档Training系列课程中文版:手势处理之滚动动画及Scroller

原文地址:http://android.xsoftlab.net/training/gestures/scroll.html 在Android中,滑动经常由ScrollView类来实现.任何超出容器边界的布局都应该将自己内嵌在ScrollView中,以便提供可滚动的视图效果.自定义滚动只有在特定的场景下才会被用到.这节课将会描述这样一种场景:使用scroller显示一种可滚动的效果. 你可以使用Scroller或者OverScroller来收集一些滑动动画所需要的数据.这两个类很相似,但是Ove

九点(九宫格)式手势解锁自定义view

周末闲着没事,写了个手势解锁的view,实现起来也蛮快的,半天多一点时间就完事.把源码和资源贴出来,给大家分享,希望对大家有用. 效果,就跟手机上的九点手势解锁一样,上个图吧: 过程嘛感觉确实没啥好讲的了,涉及的知识以前的博客都说过了,无非就是canva,paint,touch事件这些,画画圆圈画画线条,剩下的就是细节处理逻辑了.都在代码里,所以这里就主要是贴资源吧. 这个自定义view就一个类,源码如下: package com.cc.library.view; import android.

UIKit框架(16)手势识别器

UIGestureRecognizer 利用手势识别器,能够轻松识别用户在某个view上面做一些常见的手势 UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势 UITapGestureRecognizer                敲击 UIPinchGestureRecognizer            捏合手势 UIPanGestureRecognizer               拖拽 UISwipeGestureRecog

2015-10-31 iOS 中的手势

UIkit框架中绝大多数的控件都是继承自,UIResponder类,UIResponder 类有强大的处理触摸事件的能力.假如一个UIview 收到一个触摸事件,那么这个触摸事件就会去进行寻找相应的响应事件,如果在该UIview 中找不到,就寻找UIView的对象去处理,如果UIView对象没有权利处理,就往当前的上一层UIViewController去寻找,如果找不到就再寻找 UIViewController 的对象去处理,如果这个对象仍然不能处理,就再往上层 UIWindow 对象去处理,如

iOS开发——仿Clear纯手势操作的UITableView

前言 在Clear应用中,用户无需任何按钮,纯靠不同的手势就可以完成对ToDoItem的删除.完成.添加.移动.具体来说,功能上有左划删除,右划完成,点击编辑,下拉添加.捏合添加.长按移动.这里将这些功能实现并记录. 左划删除与右划完成 所谓的左右滑动,就是自定义一个cell然后在上面添加滑动手势.在处理方法中计算偏移量,如果滑动距离超过cell宽度一半,就删除它,或者是为文本添加删除线等来完成它:如果没有超过一半,那么就用动画把cell归位. 效果图如下: 关键代码如下: - (void)ha

iOS小米遥控器的手势监听及UI实现

这篇文章通过实例实现了一个类似小米手势遥控器的功能页面. 效果图如下所示: 触摸事件的响应通过对系统的触摸实践监听来进行. 通过一个数组来对点的集合进行缓存和分析. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if (!self.allowsInteraction) return; UITouch *touch = [touches anyObject]; CGPoint start = [touch lo

带有ListView的界面无法通过手势左右滑动切换界面问题解决办法

问题描述: 在做OnGestureListener滑动切换窗口的时候,会遇到这样的问题.就是当界面中含有ListView的时候,OnGestureListener的左右触屏滑动就被ListView自己吃掉了. 问题分析: 在Android系统中,事件的分发和响应都按照一定的优先级仅仅有条的进行着.如果Activity中包含ListView那么系统的onTouchEvent事件会优先分发给ListView去处理,这时ListView的OnItemClickListener监听器会优先响应onTou