//
// ViewController.m
// 手势12——26class
//
// Created by lanqs on 14-12-26.
// Copyright (c) 2014年 Li_Qian. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
{
UIView * _shoushiView;
UILabel * _showLabel;
}
- (void)initUserFace;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self initUserFace];
// Do any additional setup after loading the view, typically from a nib.
}
#pragma mark --init
- (void)initUserFace
{
_shoushiView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
_shoushiView.center = self.view.center;
_shoushiView.backgroundColor = [UIColor grayColor];
[self.view addSubview:_shoushiView];
_showLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
_showLabel.text = @"fdsaf";
_showLabel.textAlignment = NSTextAlignmentCenter;
_showLabel.center = CGPointMake(CGRectGetMidX(_shoushiView.bounds), CGRectGetMidY(_shoushiView.bounds));
_showLabel.font = [UIFont systemFontOfSize:20];
[self.view addSubview:_showLabel];
//点击手势识别器
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(processGeture:)];
tap.numberOfTouchesRequired = 1;//点击次数
tap.numberOfTapsRequired = 1;//手指数量
[_shoushiView addGestureRecognizer:tap];//添加手势识别器
//长按 手势识别器
UILongPressGestureRecognizer * longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(processGeture:)];
longPress.minimumPressDuration = 1;//最短的触发时间
[_shoushiView addGestureRecognizer:longPress];
//滑动
UISwipeGestureRecognizer * swipGesture =[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(processGeture:)];
swipGesture.direction = UISwipeGestureRecognizerDirectionRight;//滑动方向的设置
[_shoushiView addGestureRecognizer:swipGesture];
// //拖动
UIPanGestureRecognizer * panGesture = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(processGeture:)];
//当此两个手势冲突时,swipGesture有效
[panGesture requireGestureRecognizerToFail:swipGesture];//防止拖动 与滑动的冲突人、
[_shoushiView addGestureRecognizer:panGesture];
//捏合
UIPinchGestureRecognizer * pinchGesture = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(processGeture:)];
[_shoushiView addGestureRecognizer:pinchGesture];
//旋转手势
UIRotationGestureRecognizer * rotationGesture = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(processGeture:)];
[_shoushiView addGestureRecognizer:rotationGesture];
}
//UIGestureRecognizer是所有手势的父类
- (void)processGeture:(UIGestureRecognizer *)gesture
{
//判断手势的类型
if ([gesture isKindOfClass:[UITapGestureRecognizer class]])
{
_showLabel.text = @"点击手势";
}
if ([gesture isKindOfClass:[UILongPressGestureRecognizer class]])
{
_showLabel.text = @"长按手势";
}
if ([gesture isKindOfClass:[UISwipeGestureRecognizer class]])
{
UISwipeGestureRecognizer * sw = (UISwipeGestureRecognizer *)gesture;
if (sw.direction == UISwipeGestureRecognizerDirectionRight)//判断方向
{
_showLabel.text = @"滑动手势";
}
NSLog(@"fdfg");
}
if ([gesture isKindOfClass:[UIPanGestureRecognizer class]])
{
_showLabel.text = @"拖动手势";
//静态定义一个点.保存初始点
static CGPoint startPoint;
//手势状态gesture.state
// gesture.state = UIGestureRecognizerStateBegan;
//表明pan这是一个拖动手势
UIPanGestureRecognizer * pan = (UIPanGestureRecognizer *)gesture;
if (pan.state == UIGestureRecognizerStateBegan)
{
startPoint = _shoushiView.center;
}
else if (pan.state == UIGestureRecognizerStateChanged)//表明点在改变
{
//translationInView拖动方法 是在那个视图上变化的量
CGPoint translate = [pan translationInView:self.view];
_shoushiView.center = CGPointMake(startPoint.x + translate.x, startPoint.y + translate.y);
}
}
if ([gesture isKindOfClass:[UIPinchGestureRecognizer class]])
{
_showLabel.text = @"捏合手势";
//用一个静态变量存储 上一次缩放的值
static CGFloat lastScale;
UIPinchGestureRecognizer * pin = (UIPinchGestureRecognizer *)gesture;
NSLog(@"%f",pin.scale);
if (pin.state == UIGestureRecognizerStateBegan)
{
lastScale = pin.scale;
}
else if (pin.state == UIGestureRecognizerStateChanged)
{
CGFloat changeScale = (pin.scale - lastScale) /2+ 1;
_shoushiView.transform = CGAffineTransformScale(_shoushiView.transform, changeScale, changeScale);
lastScale = pin.scale;//重点 细节点
//第二种用CGAffineTransMakeScale方式
}
}
if ([gesture isKindOfClass:[UIRotationGestureRecognizer class]])
{
_showLabel.text = @"旋转手势";
UIRotationGestureRecognizer * rotate = (UIRotationGestureRecognizer *)gesture;
static CGFloat lastRotation;//幅度值
if (rotate.state == UIGestureRecognizerStateBegan)
{
lastRotation = rotate.rotation;
}
else if (rotate.state == UIGestureRecognizerStateChanged)
{
CGFloat changeRotation = rotate.rotation - lastRotation;
_shoushiView.transform = CGAffineTransformRotate(_shoushiView.transform, changeRotation);
lastRotation = rotate.rotation;
}
}
}
@end