也沒有什麼好說的,方法都差不多,只要記得當你想要同時實現兩個或多個手勢的話,要遵守<UIGestureRecognizerDelegate>協議,閒言休敘,直接上代碼:
#import "RootViewController.h" #import "RootView.h" @interface RootViewController () <UIGestureRecognizerDelegate> // 手勢識別器代理 @property (nonatomic, strong) RootView *rootView; @end @implementation RootViewController - (void)loadView { self.rootView = [[RootView alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.view = self.rootView; } - (void)viewDidLoad { [super viewDidLoad]; // 輕拍 [self tapGesture]; // 平移 //[self panGesture]; // 縮放(捏合) [self pinchGesture]; // 旋轉 [self rotationGesture]; // 長按 [self longPressGesture]; // 輕掃(滑動) [self swipeGesture]; // 屏幕邊緣輕掃(滑動) [self screenEdgePanGesture]; } #pragma mark - 輕拍手勢 UITapGestureRecognizer // 添加輕拍手勢 - (void)tapGesture { // 1.創建手勢識別對象 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureAction:)]; // 2.將手勢添加到相應視圖上 [self.rootView.imageView addGestureRecognizer:tap]; } // 實現輕拍手勢事件 - (void)tapGestureAction:(UITapGestureRecognizer *)tap { NSLog(@"輕拍成功"); } #pragma mark - 平移手勢 UIPanGestureRecognizer // 添加平移手勢 - (void)panGesture { // 1.創建手勢識別對象 UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureAction:)]; // 2.將手勢添加到相應的視圖上 [self.rootView.imageView addGestureRecognizer:pan]; } // 實現平移手勢事件 - (void)panGestureAction:(UIPanGestureRecognizer *)pan { NSLog(@"平移成功"); // 在view上面挪動的距離 CGPoint p = [pan translationInView:pan.view]; pan.view.transform = CGAffineTransformTranslate(pan.view.transform, p.x, p.y); // 清空移動的距離 [pan setTranslation:CGPointZero inView:pan.view]; } #pragma mark - 縮放手勢(捏合)UIPinchGestureRecognizer // 添加平移手勢 - (void)pinchGesture { // 1.創建手勢識別對象 UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGestureAction:)]; // 設置代理 pinch.delegate = self; // 2.將手勢添加到相應的視圖上 [self.rootView.imageView addGestureRecognizer:pinch]; } // 實現縮放手勢事件 - (void)pinchGestureAction:(UIPinchGestureRecognizer *)pinch { pinch.view.transform = CGAffineTransformScale(pinch.view.transform, pinch.scale, pinch.scale); pinch.scale = 1; } #pragma mark - 旋轉手勢 UIRotationGestureRecognizer // 添加旋轉手勢 - (void)rotationGesture { // 1.創建手勢識別對象 UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationGestureAction:)]; // 設置代理 rotation.delegate = self; // 2.將手勢添加到相應的視圖上 [self.rootView.imageView addGestureRecognizer:rotation]; } // 實現旋轉手勢事件 - (void)rotationGestureAction:(UIRotationGestureRecognizer *)rotation { rotation.view.transform = CGAffineTransformRotate(rotation.view.transform, rotation.rotation); rotation.rotation = 0; } #pragma mark - 長按手勢 UILongPressGestureRecognizer // 添加長按手勢 - (void)longPressGesture { // 1.創建手勢識別對象 UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGestureAction:)]; // 2.將手勢添加到相應的視圖上 [self.rootView.imageView addGestureRecognizer:longPress]; } // 實現長按手勢事件 - (void)longPressGestureAction:(UILongPressGestureRecognizer *)longPress { // 開始長按的時候執行 if (longPress.state == UIGestureRecognizerStateBegan) { NSLog(@"長按成功"); } } #pragma mark - 輕掃手勢 UISwipeGestureRecognizer // 添加輕掃手勢 - (void)swipeGesture { // 向上滑動 // 1.創建手勢識別對象 UISwipeGestureRecognizer *upSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGestureAction:)]; upSwipe.direction = UISwipeGestureRecognizerDirectionUp; // 2.將手勢添加到相應的視圖上 [self.rootView.imageView addGestureRecognizer:upSwipe]; // 向下滑動 // 1.創建手勢識別對象 UISwipeGestureRecognizer *downSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGestureAction:)]; downSwipe.direction = UISwipeGestureRecognizerDirectionDown; // 2.將手勢添加到相應的視圖上 [self.rootView.imageView addGestureRecognizer:downSwipe]; // 向右滑動 // 1.創建手勢識別對象 UISwipeGestureRecognizer *rightSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGestureAction:)]; rightSwipe.direction = UISwipeGestureRecognizerDirectionRight; // 2.將手勢添加到相應的視圖上 [self.rootView.imageView addGestureRecognizer:rightSwipe]; // 向左滑動 // 1.創建手勢識別對象 UISwipeGestureRecognizer *leftSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGestureAction:)]; leftSwipe.direction = UISwipeGestureRecognizerDirectionLeft; // 2.將手勢添加到相應的視圖上 [self.rootView.imageView addGestureRecognizer:leftSwipe]; } // 實現輕掃手勢事件 - (void)swipeGestureAction:(UISwipeGestureRecognizer *)swipe { if (swipe.direction == UISwipeGestureRecognizerDirectionUp) { NSLog(@"向上滑動"); } if (swipe.direction == UISwipeGestureRecognizerDirectionDown) { NSLog(@"向下滑動"); } if (swipe.direction == UISwipeGestureRecognizerDirectionLeft) { NSLog(@"向左滑動"); } if (swipe.direction == UISwipeGestureRecognizerDirectionRight) { NSLog(@"向右滑動"); } } #pragma mark - 屏幕邊緣輕掃 UIScreenEdgePanGestureRecognizer // 添加屏幕邊緣輕掃手勢(也有多個方式,我們這裡只介紹一下,從屏幕頂部和左邊輕掃,其他的都一樣) - (void)screenEdgePanGesture { // 從屏幕頂部輕掃屏幕邊緣 // 1.創建手勢識別對象 UIScreenEdgePanGestureRecognizer *TopScreenEdgePan = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(screenEdgePanGestureAction:)]; TopScreenEdgePan.edges = UIRectEdgeTop; // 2.將手勢添加到相應的視圖上 [self.rootView addGestureRecognizer:TopScreenEdgePan]; // 從屏幕左邊輕掃屏幕邊緣 // 1.創建手勢識別對象 UIScreenEdgePanGestureRecognizer *leftScreenEdgePan = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(screenEdgePanGestureAction:)]; leftScreenEdgePan.edges = UIRectEdgeLeft; // 2.將手勢添加到相應的視圖上 [self.rootView addGestureRecognizer:leftScreenEdgePan]; } // 實現屏幕邊緣輕掃手勢 - (void)screenEdgePanGestureAction:(UIScreenEdgePanGestureRecognizer *)screenEdgePan { if (screenEdgePan.edges == UIRectEdgeTop) { NSLog(@"從屏幕頂部輕掃屏幕邊緣"); } if (screenEdgePan.edges == UIRectEdgeLeft) { NSLog(@"從屏幕左邊輕掃屏幕邊緣"); } } #pragma mark - 實現協議方法,同時識別多個手勢 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end