在IOS中手势可以让用户有很好的体验,因此我们有必要去了解一下手势。
(在设置手势是有很多值得注意的地方)
*是需要设置为Yes的点击无法响应*
*要把手势添加到所需点击的View,否则无法响应*
手势共有六种,下面我会分开介绍。
点击手势
//
// ViewController.m
// CX-手势详解
//
// Created by ma c on 16/3/24.
// Copyright © 2016年 xubaoaichiyu. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UIImageView * imageView;
@end
@implementation ViewController
#pragma mark - set_and_get
-(UIImageView *)imageView{
if (!_imageView) {
_imageView = [[UIImageView alloc]init];
UIImage * image = [UIImage imageNamed:@"nvshen.jpg"];
_imageView.bounds = (CGRect){CGPointZero,image.size};
_imageView.center = self.view.center;
//交互一定要设置为YES 否则无法实现手势
_imageView.userInteractionEnabled = YES;
_imageView.image = image;
}
return _imageView;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.imageView];
//点击手势
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(doAction:)];
//点击一下生效
tap.numberOfTapsRequired = 1;
UITapGestureRecognizer * tapNew = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(doAction:)];
//点击两下生效
tapNew.numberOfTapsRequired = 2;
//在imageView上添加手势
[self.imageView addGestureRecognizer:tap];
[self.imageView addGestureRecognizer:tapNew];
//当点击两下生效时,使点击一下失效
[tap requireGestureRecognizerToFail:tapNew];
}
-(void)doAction:(UITapGestureRecognizer *)tap{
if (tap.numberOfTapsRequired == 1) {
NSLog(@"点击一下");
}else if(tap.numberOfTapsRequired == 2 ){
NSLog(@"点击两下");
}
}
@end
拖动手势
//
// ViewController.m
// CX-手势详解
//
// Created by ma c on 16/3/24.
// Copyright © 2016年 xubaoaichiyu. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UIImageView * imageView;
@end
@implementation ViewController
#pragma mark - set_and_get
-(UIImageView *)imageView{
if (!_imageView) {
_imageView = [[UIImageView alloc]init];
UIImage * image = [UIImage imageNamed:@"nvshen.jpg"];
_imageView.bounds = (CGRect){CGPointZero,image.size};
_imageView.center = self.view.center;
//交互一定要设置为YES 否则无法实现手势
_imageView.userInteractionEnabled = YES;
_imageView.image = image;
}
return _imageView;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.imageView];
//拖动手势
UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(doAction:)];
[self.view addGestureRecognizer:pan];
}
-(void)doAction:(UIPanGestureRecognizer *)pan{
//获取偏移量
CGPoint point = [pan translationInView:self.imageView];
//通过改变self。imageView的Center来实现拖动
self.imageView.center = CGPointMake(self.imageView.center.x + point.x
, self.imageView.center.y + point.y);
//复位 如果不进行复位 会在改变的基础上改变 从而使效果不对
[pan setTranslation:CGPointZero inView:self.imageView];
}
@end
长按手势
//
// ViewController.m
// CX-手势详解
//
// Created by ma c on 16/3/24.
// Copyright © 2016年 xubaoaichiyu. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UIImageView * imageView;
@end
@implementation ViewController
#pragma mark - set_and_get
-(UIImageView *)imageView{
if (!_imageView) {
_imageView = [[UIImageView alloc]init];
UIImage * image = [UIImage imageNamed:@"nvshen.jpg"];
_imageView.bounds = (CGRect){CGPointZero,image.size};
_imageView.center = self.view.center;
//交互一定要设置为YES 否则无法实现手势
_imageView.userInteractionEnabled = YES;
_imageView.image = image;
}
return _imageView;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.imageView];
//长按手势
UILongPressGestureRecognizer * longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(doAction:)];
[self.imageView addGestureRecognizer:longPress];
}
-(void)doAction:(UILongPressGestureRecognizer *)longPress{
if (longPress.state == UIGestureRecognizerStateBegan) {
NSLog(@"开始");
}
else if (longPress.state == UIGestureRecognizerStateEnded){
NSLog(@"结束");
}
}
@end
轻扫手势
//
// ViewController.m
// CX-手势详解
//
// Created by ma c on 16/3/24.
// Copyright © 2016年 xubaoaichiyu. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UIImageView * imageView;
@end
@implementation ViewController
#pragma mark - set_and_get
-(UIImageView *)imageView{
if (!_imageView) {
_imageView = [[UIImageView alloc]init];
UIImage * image = [UIImage imageNamed:@"nvshen.jpg"];
_imageView.bounds = (CGRect){CGPointZero,image.size};
_imageView.center = self.view.center;
//交互一定要设置为YES 否则无法实现手势
_imageView.userInteractionEnabled = YES;
_imageView.image = image;
}
return _imageView;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.imageView];
//轻扫手势
UISwipeGestureRecognizer * swipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(doAction:)];
//需要设置 默认为右
/*
默认是UISwipeGestureRecognizerDirectionRight。所需的方向刷。可指定多个方向是否会导致相同的行为(例如,UITableView滑动删除)
*/
swipe.direction = UISwipeGestureRecognizerDirectionLeft;
[self.imageView addGestureRecognizer:swipe];
}
-(void)doAction:(UISwipeGestureRecognizer *)swipe{
if (swipe.direction == UISwipeGestureRecognizerDirectionLeft) {
NSLog(@"左");
}
else if (swipe.direction == UISwipeGestureRecognizerDirectionRight){
NSLog(@"右");
}
else if (swipe.direction == UISwipeGestureRecognizerDirectionDown){
NSLog(@"下");
}
else if (swipe.direction == UISwipeGestureRecognizerDirectionUp){
NSLog(@"上");
}
}
@end
捏合手势
(在捏合和旋转手势中我们需要一些操作)
*按住option 在触碰到触摸板的时候会出现模拟出现的两根手指*
*如果你所操作的view不在两个触摸点的位置,可以按住shift进行移动*
*当进行捏合旋转的时候,一定要把触摸板按下,才可进行操作*
//
// ViewController.m
// CX-手势详解
//
// Created by ma c on 16/3/24.
// Copyright © 2016年 xubaoaichiyu. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UIImageView * imageView;
@end
@implementation ViewController
#pragma mark - set_and_get
-(UIImageView *)imageView{
if (!_imageView) {
_imageView = [[UIImageView alloc]init];
UIImage * image = [UIImage imageNamed:@"nvshen.jpg"];
_imageView.bounds = (CGRect){CGPointZero,image.size};
_imageView.center = self.view.center;
//交互一定要设置为YES 否则无法实现手势
_imageView.userInteractionEnabled = YES;
_imageView.image = image;
}
return _imageView;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.imageView];
//捏合手势
UIPinchGestureRecognizer * pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(doAction:)];
[self.imageView addGestureRecognizer:pinch];
}
-(void)doAction:(UIPinchGestureRecognizer *)pinch{
//持续改变
self.imageView.transform = CGAffineTransformScale(self.imageView.transform, pinch.scale, pinch.scale);
//复位
pinch.scale = 1;
}
@end
旋转手势
//
// ViewController.m
// CX-手势详解
//
// Created by ma c on 16/3/24.
// Copyright © 2016年 xubaoaichiyu. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UIImageView * imageView;
@end
@implementation ViewController
#pragma mark - set_and_get
-(UIImageView *)imageView{
if (!_imageView) {
_imageView = [[UIImageView alloc]init];
UIImage * image = [UIImage imageNamed:@"nvshen.jpg"];
_imageView.bounds = (CGRect){CGPointZero,image.size};
_imageView.center = self.view.center;
//交互一定要设置为YES 否则无法实现手势
_imageView.userInteractionEnabled = YES;
_imageView.image = image;
}
return _imageView;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.imageView];
//旋转手势
UIRotationGestureRecognizer * rotation = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(doAction:)];
[self.imageView addGestureRecognizer:rotation];
}
-(void)doAction:(UIRotationGestureRecognizer *)rotation{
//持续改变
self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, rotation.rotation);
//复位
rotation.rotation = 0;
}
@end
有一点值得注意的是,旋转手势和捏合手势是不可以同时操作的,想要同时操作可以通过代理实现,如下。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
在上面的代码实现时返回YES即可。