IOS各種手勢的使用
#import "HYBRootViewController.h" @interface HYBRootViewController () <UIGestureRecognizerDelegate> @property (nonatomic, retain) UIImageView *imageView; - (void)imageViewTap:(UITapGestureRecognizer *)sender; @end @implementation HYBRootViewController @synthesize imageView = _imageView; - (void)viewDidLoad { [super viewDidLoad]; self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(50, 100, 200, 200)]; self.imageView.image = [UIImage imageNamed:@"1.png"]; self.imageView.userInteractionEnabled = YES; // Default is NO [self.view addSubview:self.imageView]; // 添加點擊手勢 // 所有手勢的父類 UIGestureReconizer UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewTap:)]; //tap.numberOfTapsRequired = 2; // 要求雙擊才觸發事件 tap.numberOfTouchesRequired = 2; // 要求兩個手指同時觸摸才觸發事件 // 將點擊手勢添加到imageView上 [self.imageView addGestureRecognizer:tap]; tap.delegate = self; [tap release]; // // 添加移動手勢 UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewPaned:)]; [self.imageView addGestureRecognizer:pan]; pan.delegate = self; [pan release]; // // 添加縮放手勢 UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewPinched:)]; [self.imageView addGestureRecognizer:pinch]; pinch.delegate = self; [pinch release]; // 旋轉手勢 UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewRotated:)]; [self.imageView addGestureRecognizer:rotation]; rotation.delegate = self; [rotation release]; return; } - (void)dealloc { self.imageView = nil; [super dealloc]; return; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; return; } - (void)imageViewTap:(UITapGestureRecognizer *)sender { self.view.backgroundColor = [UIColor greenColor]; return; } // 此方法在移動過程中時時調用 // 移動手勢 - (void)imageViewPaned:(UIPanGestureRecognizer *)sender { NSLog(@"paned"); // 這個view是這個移動手勢被回到的視圖上的view,這裏就是self.imageView //sender.view // 拿到父 視圖imageView被點擊的點在Self.view上的位置 CGPoint pt = [sender translationInView:self.view]; sender.view.center = CGPointMake(sender.view.center.x + pt.x, sender.view.center.y + pt.y); // 重置手勢獲取的偏移量 // 這一步很重要 [sender setTranslation:CGPointZero inView:self.view]; return; } // 縮放手勢 // 此方法在縮放過程中會被調用多次 - (void)imageViewPinched:(UIPinchGestureRecognizer *)sender { // 很重要的一個屬性scale,會被捕獲到縮放的倍數 // 參數一:原來的transform // 參數二:水平方向縮放的倍數 // 參數三:垂直方向縮放的倍數 // CGAffineTansform 仿射變換矩陣(矩陣中放置view的縮放倍數,旋轉角度,x,y坐標等參數) // 將x,y方向的縮放倍數傳給transform sender.view.transform = CGAffineTransformScale(sender.view.transform, sender.scale, sender.scale); // 會被多次調用這個方法,所以每次都要重置縮放倍數為原始倍數 sender.scale = 1.0f; return; } // 旋轉手勢 - (void)imageViewRotated:(UIRotationGestureRecognizer *)sender { // 改變矩陣的角度參數 sender.view.transform = CGAffineTransformRotate(sender.view.transform, sender.rotation); // 重置角度,因為在這個方法在旋轉時會時時被調用 sender.rotation = 0.0f; return; } // 設置同時可以有兩個手勢同時識別 // 基本上是同時識別兩個,默認為NO - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } @end
最後更新:2017-04-03 12:56:18