//
// TouchView.m
// touchnumber
//
// Created by liyang on 14-4-26.
// Copyright (c) 2014年 liyang. All rights reserved.
//
#import "TouchView.h"
@implementation TouchView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.userInteractionEnabled=YES;//这个作用是设置此视图是否能捕获事件,当上面的视图的都不能捕获事件的时候下面的视图自然就能捕获了。当UIImageView为什么要设置 self.userInteractionEnabled=YES;因为那个视图默认为no不能捕获事件,上面的按钮自己也不能捕获,所以在上面加上按钮的时候必须将这个属性设置为yes
self.multipleTouchEnabled=YES;//这个作用是设置此视图是否支持多点触摸
}
return self;
}
//触摸开始
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch= [touches anyObject];
NSInteger touchnumber=touch.tapCount;
if (touchnumber==1) {
//[self singleTab];//这样调用会造成,先执行单击,再双击,所以我们还一种当时来调用
[self performSelector:@selector(singleTab) withObject:nil afterDelay:0.5];//延迟0.5秒调用这个方法
}else if(touchnumber==2){
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTab) object:nil];//取消之间延迟调用的方法
[self doubleTab];
}
}
//触摸移动
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch= [touches anyObject];
CGPoint point=[touch locationInView:self];//拿到点击的坐标
UIView *view= [[self superview] viewWithTag:100];
CGRect frame= view.frame;
frame.origin=point;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
view.frame=frame;
[UIView commitAnimations];
NSLog(@"%@",NSStringFromCGPoint(point));
}
//触摸结束
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
}
//触摸取消,比如打电话进来了
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{
}
-(void)singleTab{
NSLog(@"单击");
}
-(void)doubleTab{
NSLog(@"双击");
}
@end
捏合手势,2点距离
//
// TouchView.m
// touchnumber
//
// Created by liyang on 14-4-26.
// Copyright (c) 2014年 liyang. All rights reserved.
//
#import "TouchView.h"
@implementation TouchView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.userInteractionEnabled=YES;//这个作用是设置此视图是否能捕获事件,当上面的视图的都不能捕获事件的时候下面的视图自然就能捕获了。当UIImageView为什么要设置 self.userInteractionEnabled=YES;因为那个视图默认为no不能捕获事件,上面的按钮自己也不能捕获,所以在上面加上按钮的时候必须将这个属性设置为yes
self.multipleTouchEnabled=YES;//这个作用是设置此视图是否支持多点触摸
}
return self;
}
double distince=0;
//触摸开始
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
if ([touches count]==2) {//捏合手势
NSArray *toucharray= [touches allObjects];
UITouch * firsttouch=[toucharray objectAtIndex:0];
UITouch * secondtouch=[toucharray objectAtIndex:1];
CGPoint point1=[firsttouch locationInView:self];
CGPoint point2=[secondtouch locationInView:self];
//计算2点的距离
distince=[self distince:point1 point:point2];
NSLog(@"%f",distince);
}
}
//计算2点的距离
-(double)distince:(CGPoint)p1 point:(CGPoint)p2{
return sqrt(pow(p1.x-p2.x,2)+pow(p1.y-p2.y,2));
}
//触摸移动
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
if ([touches count]==2) {//捏合手势
NSArray *toucharray= [touches allObjects];
UITouch * firsttouch=[toucharray objectAtIndex:0];
UITouch * secondtouch=[toucharray objectAtIndex:1];
CGPoint point1=[firsttouch locationInView:self];
CGPoint point2=[secondtouch locationInView:self];
//计算2点的距离
double distince_new=[self distince:point1 point:point2];
NSLog(@"%f",distince_new/distince);//这个就可以作为放大的倍数了
}
}
//触摸结束
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
}
//触摸取消,比如打电话进来了
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{
}
@end
//手势
//
// RootViewController.m
// uigesturerecognize
//
// Created by liyang on 14-4-26.
// Copyright (c) 2014年 liyang. All rights reserved.
//
#import "RootViewController.h"
@interface RootViewController ()
@end
@implementation RootViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
//单击
UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)];
[self.view addGestureRecognizer:tap];
//双击
UITapGestureRecognizer *tap1=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap1:)];
tap1.numberOfTapsRequired=2;
[self.view addGestureRecognizer:tap1];
[tap requireGestureRecognizerToFail:tap1];//区别双击和单机,估计实现和刚才一样的,因为现在单机明显慢半拍了
//清扫
UISwipeGestureRecognizer *swipe= [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipe:)];
swipe.numberOfTouchesRequired=2;//清扫用的手指数
swipe.direction=UISwipeGestureRecognizerDirectionRight;//清扫的方向
[self.view addGestureRecognizer:swipe];
//滑动
UIPanGestureRecognizer *pan= [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(pan:)];
[self.view addGestureRecognizer:pan];
//长按手势
UILongPressGestureRecognizer *longpress=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longpress:)];
longpress.minimumPressDuration=2;//长按的时间
[self.view addGestureRecognizer:longpress];
//旋转手势
UIRotationGestureRecognizer *rotation= [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationaction:)];
[self.view addGestureRecognizer:rotation];
//捏合手势
UIPinchGestureRecognizer*pinch= [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchaction:)];
[self.view addGestureRecognizer:pinch];
}
-(void)tap:(UITapGestureRecognizer *)pangesturerecognizer{
NSLog(@"单击");
}
-(void)tap1:(UITapGestureRecognizer *)pangesturerecognizer{
CGPoint p= [pangesturerecognizer locationInView:self.view];//取得划过的点
NSLog(@"%@", NSStringFromCGPoint(p));
NSLog(@"双击");
}
-(void)swipe:(UISwipeGestureRecognizer *)swipeGesture{
NSLog(@"清扫");
}
-(void)pan:(UIPanGestureRecognizer *)pan{
CGPoint p= [pan locationInView:self.view];//取得划过的点
NSLog(@"%@", NSStringFromCGPoint(p));
}
-(void)longpress:(UILongPressGestureRecognizer *)pan{
if (pan.state==UIGestureRecognizerStateEnded) {
return;
}
CGPoint p= [pan locationInView:self.view];//长按也可以获取点取得划过的点,得出结论所有手势都可以获得点
NSLog(@"长按%@", NSStringFromCGPoint(p));
}
-(void)rotationaction:(UIRotationGestureRecognizer *)rotation{
NSLog(@"%f",rotation.rotation*(180/M_PI));
}
-(void)pinchaction:(UIPinchGestureRecognizer *)pinchgesturerecognizer{
if (pinchgesturerecognizer.state==UIGestureRecognizerStateEnded) {
return;
}
if ( pinchgesturerecognizer.scale>1) {
NSLog(@"放大,%f",pinchgesturerecognizer.scale);
}else{
NSLog(@"缩小%f",pinchgesturerecognizer.scale);
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
















