=====仿照支付宝首页======参考http://www.jianshu.com/p/b2925fd1f904
1.注意处理轻扫和拖拽的冲突
//那个时间短的话 就让那个先执行
//处理 拖拽和轻扫 两个手势的冲突
//需要轻扫手势执行完毕后 再去执行拖拽 先执行轻扫后 再执行拖动
处理方法: [panges(拖拽对象) requireGestureRecognizerToFail:swiges(轻扫对象)];
2.程序出现手势不响应处理方法
// 手势如果不响应
// 1.看是否添加到了imageView上 如果是 把userInteractionEnabled 设置成YES
// 2.查看是否设置了背景颜色 如果没有设置 设置背景颜色
// 3.手势冲突 就得设置手势优先级了 (截获触发事件、手势)设置优先级
手势的使用方法
#import "ViewController.h"
@interface ViewController ()<UIGestureRecognizerDelegate>
@property (weak, nonatomic) IBOutletUIImageView *imageView;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//------------------------------轻触手势---------------------------
//1.创建手势识别对象
UITapGestureRecognizer * tap = [[UITapGestureRecognizeralloc]init];
//2.设置对象属性
//2.1设置点击次数
// tap.numberOfTapsRequired = 2;
//2.2 设置手指个数
// tap.numberOfTouchesRequired = 2;
//2.3设置代理
tap.delegate = self;
//3.添加监听事件
[tap addTarget:selfaction:@selector(tap:)];
//4.把手势对象添加到要作用的view上
[self.imageViewaddGestureRecognizer:tap];
//------------------------------轻触手势---------------------------
//------------------------------长按手势---------------------------
//1.创建手势对象
UILongPressGestureRecognizer * longPress = [[UILongPressGestureRecognizeralloc]initWithTarget:selfaction:@selector(longPress:)];
//2.设置对象属性
//2.1 设置长按时间
longPress.minimumPressDuration =2;
//2.2 设置允许移动误差
longPress.allowableMovement = 30;
//3.添加监听事件
//4.添加到要作用的view上
[self.imageViewaddGestureRecognizer:longPress];
//------------------------------长按手势---------------------------
//------------------------------拖拽手势---------------------------
//1.创建手势对象
UIPanGestureRecognizer * pan = [[UIPanGestureRecognizeralloc]initWithTarget:selfaction:@selector(pan:)];
//2.设置属性
//3.监听事件
//4.添加到要作用的view上
[self.imageViewaddGestureRecognizer:pan];
//------------------------------拖拽手势---------------------------
}
//拖拽手势方法
- (void) pan:(UIPanGestureRecognizer *) panGesture
{
CGPoint point = [panGesture translationInView:panGesture.view];
NSLog(@"%@",NSStringFromCGPoint(point));
self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, point.x
, point.y);
//每次拖拽后的数据清零,防止数值累加
[panGesture setTranslation:CGPointZeroinView:panGesture.view];
// self.imageView.transform = CGAffineTransformMakeTranslation(point.x, point.y);
}
=======================
//给按钮添加拖动的手势
-(void)addGestureToSuspendedBtn:(UIPanGestureRecognizer *)pan {
// //获取当前作用点的坐标
// CGPoint p = [pan locationInView:pan.view];
//获取移动的距离大小
CGPoint point= [pan translationInView:pan.view];
//更改视图的中心点坐标
CGPoint points=pan.view.center;
points.x+=point.x;
points.y+=point.y;
pan.view.center=points;
//每次都清空一下消除坐标叠加(把当前手势所在的点的坐标变为(0,0))
[pan setTranslation:CGPointZeroinView:self.btn];
}
=================
//长按手势方法
- (void) longPress:(UILongPressGestureRecognizer *) longGesture
{
if (longGesture.state ==UIGestureRecognizerStateBegan)
{
[UIViewanimateWithDuration:0.5animations:^{
self.imageView.alpha =0.2;
} completion:^(BOOL finished) {
[UIViewanimateWithDuration:0.5animations:^{
self.imageView.alpha =1;
}];
}];
NSLog(@"longPress");
}
}
//实现代理方法
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
//通过touch获取点击坐标
CGPoint point = [touch locationInView:touch.view];
if(point.y >self.imageView.bounds.size.height/2)
{
return NO;
}
return YES;
}
- (void) tap:(UITapGestureRecognizer *) tapGesture
{
NSLog(@"我点!!!");
}
#import "ViewController.h"
@interface ViewController ()<UIGestureRecognizerDelegate>
@property (weak, nonatomic) IBOutletUIImageView *imageView;
@property (nonatomic,assign)int index;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//初始化
self.index =1;
//--------------捏合手势---------------------------
//1.创建手势
UIPinchGestureRecognizer * pinch = [[UIPinchGestureRecognizeralloc]initWithTarget:selfaction:@selector(pinch:)];
//2.设置属性
//3.监听事件
//设置代理
pinch.delegate = self;
//4.添加到要作用的view上
[self.imageViewaddGestureRecognizer:pinch];
//--------------捏合手势---------------------------
//--------------旋转手势---------------------------
//1.创建手势对象
UIRotationGestureRecognizer * rotation = [[UIRotationGestureRecognizeralloc]initWithTarget:selfaction:@selector(rotation:)];
//设置代理
rotation.delegate = self;
//2.添加到要做用的view上
[self.imageViewaddGestureRecognizer:rotation];
//--------------旋转手势---------------------------
//--------------轻扫手势---------------------------
//1.创建手势对象
//向左下一张
UISwipeGestureRecognizer * leftSwipe = [[UISwipeGestureRecognizeralloc]initWithTarget:selfaction:@selector(swipe:)];
//设置轻扫方向
leftSwipe.direction =UISwipeGestureRecognizerDirectionLeft;
//2.添加要作用的view上
[self.imageViewaddGestureRecognizer:leftSwipe];
//向右上一张
UISwipeGestureRecognizer * rightSwipe = [[UISwipeGestureRecognizeralloc]initWithTarget:selfaction:@selector(swipe:)];
//设置方向
rightSwipe.direction =UISwipeGestureRecognizerDirectionRight;
[self.imageViewaddGestureRecognizer:rightSwipe];
//--------------轻扫手势---------------------------
}
//实现轻扫的方法
- (void) swipe:(UISwipeGestureRecognizer *) swiprGesture
{
//添加动画效果
CATransition * trans = [CATransitionanimation];
trans.type = @"cube";
//判断清扫方向
if (swiprGesture.direction ==UISwipeGestureRecognizerDirectionLeft)
{
//下一张
self.index++;
trans.subtype =kCATransitionFromRight;
}
elseif (swiprGesture.direction ==UISwipeGestureRecognizerDirectionRight)
{
//上一张
self.index--;
trans.subtype =kCATransitionFromLeft;
}
//让图片循环
if (self.index >4)
{
self.index =1;
}
else if (self.index <1)
{
self.index =4;
}
//拼接图片名
NSString * imageName = [NSStringstringWithFormat:@"img%02d",self.index];
self.imageView.image = [UIImageimageNamed:imageName];
[self.imageView.layeraddAnimation:transforKey:nil];
}
//是否支持同时多个手势
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
//实现旋转手势方法
- (void) rotation:(UIRotationGestureRecognizer *) rotationGesture
{
NSLog(@"%f",rotationGesture.rotation);
self.imageView.transform =CGAffineTransformRotate(self.imageView.transform, rotationGesture.rotation);
rotationGesture.rotation = 0;
// self.imageView.transform = CGAffineTransformMakeRotation(rotationGesture.rotation);
}
//实现捏合手势事件方法
- (void) pinch:(UIPinchGestureRecognizer *) pinchGesture
{
NSLog(@"%f",pinchGesture.scale);
self.imageView.transform =CGAffineTransformScale(self.imageView.transform, pinchGesture.scale, pinchGesture.scale);
pinchGesture.scale = 1;
// self.imageView.transform = CGAffineTransformMakeScale(pinchGesture.scale, pinchGesture.scale);
}
#define MaxSCale 3.0 //最大缩放比例
#define MinScale 1 //最小缩放比例
@property(nonatomic,assign)float totalScale;
self.totalScale=1.0f;
-(void)pinge{
// 添加捏合手势识别器
g_pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGestureHandle:)];
[self.playView addGestureRecognizer:g_pinchGestureRecognizer];
}
- (void)pinchGestureHandle:(UIPinchGestureRecognizer *)pinchGesture {
NSLog(@"捏合手势");
// UIView *view=pinchGesture.view;
// if (pinchGesture.state==UIGestureRecognizerStateBegan || pinchGesture.state==UIGestureRecognizerStateChanged){
// //扩大、缩小倍数
// view.transform=CGAffineTransformScale(view.transform, pinchGesture.scale, pinchGesture.scale);
// pinchGesture.scale=1.f;
// }
CGFloat scale = pinchGesture.scale;
//放大情况
if(scale > 1.0){
if(self.totalScale > MaxSCale) return;
}
//缩小情况
if (scale < 1.0) {
if (self.totalScale < MinScale) return;
}
pinchGesture.view.transform = CGAffineTransformScale(pinchGesture.view.transform, scale, scale);
self.totalScale *=scale;
pinchGesture.scale = 1.0;
}