手勢是指你用一個或多個手指接觸屏幕開始,直到你的手指全部離開屏幕為止所發生的所有事件。手勢識別器(UIGestureRecognizer)是一個對象,知道如何觀察用戶生成的事件流,並識別用戶何時以與預定義的手勢相匹配的方式進行拉觸摸和拖動。UIGestureRecognizer類封裝了查找手勢的工作。在模擬器中,按“option”鍵,可模擬兩個手指的手勢。
在.h文件裡創建一個視圖對象,所有的手勢都是在視圖上進行的:
@interface LinViewController : UIViewController //創建視圖對象 @property (retain, nonatomic) UIView * mView; @end在.m文件裡,創建各個手勢的對象,編寫各個手勢的實現方法:
@implementation LinViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//---點擊手勢識別器---//
//創建點擊手勢的對象
UITapGestureRecognizer * pSingleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(singleGesture:)];
//將手勢添加到當前視圖中
[self.view addGestureRecognizer:pSingleTap];
//創建點擊手勢的對象
UITapGestureRecognizer * pDoubleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(doubleGesture:)];
//設置點擊次數為2次,默認為1次,屬於單擊操作
pDoubleTap.numberOfTapsRequired = 2;
//將手勢添加到當前視圖中
[self.view addGestureRecognizer:pDoubleTap];
//雙擊的時候讓單擊放棄響應
[pSingleTap requireGestureRecognizerToFail:pDoubleTap];
//釋放創建的對象
[pDoubleTap release];
[pSingleTap release];
//---滑動手勢識別器---//
//創建滑動手勢的對象
UISwipeGestureRecognizer * pSwip = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipGesture:)];
//設置滑動的方向,此處為向右,共有4個方向
pSwip.direction = UISwipeGestureRecognizerDirectionRight;
//將手勢添加到當前視圖中
[self.view addGestureRecognizer:pSwip];
//釋放創建的對象
[pSwip release];
//---拖動手勢識別器--//
//創建拖動手勢對象
UIPanGestureRecognizer * pPan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGesture:)];
//將手勢添加到當前視圖中
[self.view addGestureRecognizer:pPan];
//釋放創建的對象
[pPan release];
//---長按手勢識別器--//
//創建長按手勢的對象
UILongPressGestureRecognizer * pLongPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressGesture:)];
//設置長按的時間,2秒以上判定為長按
pLongPress.minimumPressDuration = 2;
//將手勢添加到當前視圖中
[self.view addGestureRecognizer:pLongPress];
//釋放創建的對象
[pLongPress release];
//---旋轉手勢識別器---//
//創建旋轉手勢對象
UIRotationGestureRecognizer * pRotation = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGesture:)];
//將手勢添加到當前視圖中
[self.view addGestureRecognizer:pRotation];
//釋放創建的對象
[pRotation release];
}
#pragma mark--------tapGesture>>>single 單擊
- (void)singleGesture:(UITapGestureRecognizer *)tap
{
//單擊手勢對應的操作
NSLog(@"單擊操作");
}
#pragma mark--------tapGesture>>>double 雙擊
- (void)doubleGesture:(UITapGestureRecognizer *)tap
{
//雙擊手勢對應的操作
NSLog(@"雙擊操作");
}
#pragma mark--------tapGesture>>>Swip 滑動
- (void)swipGesture:(UISwipeGestureRecognizer *)swip
{
//滑動,劃屏手勢對應的操作
NSLog(@"滑動操作,分方向,此處向右滑動");
}
#pragma mark--------tapGesture>>>Pan 平移
- (void)panGesture:(UIPanGestureRecognizer *)pan
{
//獲取平移手勢在視圖上的坐標
CGPoint point = [pan locationInView:self.view];
//把視圖的中心點確定在平移手勢的坐標上,即把視圖拖動到平移點
self.mView.center = point;
NSLog(@"%@",NSStringFromCGPoint(point));
}
#pragma mark--------tapGesture>>>LongPress 長按
- (void)longPressGesture:(UILongPressGestureRecognizer *)longPress
{
//長按手勢對應的操作
NSLog(@"長按操作");
}
#pragma mark--------tapGesture>>>Rotation 旋轉
- (void)rotationGesture:(UIRotationGestureRecognizer *)rotation
{
//確定手勢旋轉的大小,角度,使視圖做出相應的反應
float degree = rotation.rotation *(180/M_PI);
NSLog(@"旋轉的角度為%.2f",degree);
}
//釋放創建的對象
- (void)dealloc
{
[_mView release];
[super dealloc];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
@end