`

iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer

    博客分类:
  • ios
 
阅读更多

首先新建一个基于Sigle view Application的项目,名为GestureTest;我的项目结构如下:

 

往viewController.xib文件里拖动一个imageView,并使覆盖整个屏幕,改动属性为:

 

viewController.h文件:

 

[cpp]viewplaincopy

 

1.     #import <UIKit/UIKit.h>  

2.       

3.     @interface ViewController : UIViewController{  

4.         IBOutlet UIImageView *imageView;  

5.     }  

6.     @property (nonatomic,retain)IBOutlet UIImageView *imageView;  

7.     @end  

并使xib文件里的imageView与之连接;

 

然后是viewController.m文件的实现部分:

 

[cpp]viewplaincopy

 

1.     @synthesize imageView;  

2.       

3.     CGFloat lastScaleFactor=1;//放大、缩小  

4.     CGFloat  netRotation;//旋转  

5.     CGPoint netTranslation;//平衡  

6.     NSArray *images;//图片数组  

7.     int imageIndex=0;//数组下标  

8.       

9.     - (void)viewDidLoad  

10.   {  

11.       //1、创建手势实例,并连接方法handleTapGesture,点击手势  

12.       UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleTapGesture:)];  

13.       //设置手势点击数,双击:点2  

14.       tapGesture.numberOfTapsRequired=2;  

15.       // imageView添加手势识别  

16.       [imageView addGestureRecognizer:tapGesture];  

17.       //释放内存  

18.       [tapGesture release];  

19.         

20.       //2、手势为捏的姿势:按住option按钮配合鼠标来做这个动作在虚拟器上  

21.       UIPinchGestureRecognizer *pinchGesture=[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(handlePinchGesture:)];  

22.       [imageView addGestureRecognizer:pinchGesture];//imageView添加手势识别  

23.       [pinchGesture release];  

24.         

25.       //3、旋转手势:按住option按钮配合鼠标来做这个动作在虚拟器上  

26.       UIRotationGestureRecognizer *rotateGesture=[[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(handleRotateGesture:)];  

27.       [imageView addGestureRecognizer:rotateGesture];  

28.       [rotateGesture release];  

29.         

30.       //4、拖手势  

31.       UIPanGestureRecognizer *panGesture=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePanGesture:)];  

32.      // [imageView addGestureRecognizer:panGesture];  

33.       [panGesture release];  

34.         

35.       //5、划动手势  

36.       images=[[NSArray alloc]initWithObjects:@"cell.jpg",@"heihua.jpg",@"xuanyi.jpg", nil];  

37.       //右划  

38.       UISwipeGestureRecognizer *swipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipeGesture:)];  

39.       [imageView addGestureRecognizer:swipeGesture];  

40.       [swipeGesture release];  

41.       //左划  

42.       UISwipeGestureRecognizer *swipeLeftGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipeGesture:)];  

43.       swipeGesture.direction=UISwipeGestureRecognizerDirectionLeft;//不设置黑夜是右  

44.       [imageView addGestureRecognizer:swipeLeftGesture];  

45.       [swipeLeftGesture release];  

46.         

47.       //6、长按手势  

48.       UILongPressGestureRecognizer *longpressGesutre=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(handleLongpressGesture:)];  

49.       //长按时间为1  

50.       longpressGesutre.minimumPressDuration=1;  

51.       //允许15秒中运动  

52.       longpressGesutre.allowableMovement=15;  

53.       //所需触摸1  

54.       longpressGesutre.numberOfTouchesRequired=1;  

55.       [imageView addGestureRecognizer:longpressGesutre];  

56.       [longpressGesutre release];  

57.         

58.       [super viewDidLoad];  

59.       // Do any additional setup after loading the view, typically from a nib.  

60.   }  

61.   //双击屏幕时会调用此方法,放大和缩小图片  

62.   -(IBAction)handleTapGesture:(UIGestureRecognizer*)sender{  

63.       //判断imageView的内容模式是否是UIViewContentModeScaleAspectFit,该模式是原比例,按照图片原时比例显示大小  

64.       if(sender.view.contentMode==UIViewContentModeScaleAspectFit){  

65.           //imageView模式改成UIViewContentModeCenter,按照图片原先的大小显示中心的一部分在imageView  

66.           sender.view.contentMode=UIViewContentModeCenter;  

67.       }else{  

68.           sender.view.contentMode=UIViewContentModeScaleAspectFit;  

69.       }  

70.   }  

71.   //捏的手势,使图片放大和缩小,捏的动作是一个连续的动作  

72.   -(IBAction)handlePinchGesture:(UIGestureRecognizer*)sender{  

73.       //得到sender捏手势的大小  

74.       CGFloat factor=[(UIPinchGestureRecognizer*)sender scale];  

75.       if(factor>1){  

76.           //图片放大  

77.           sender.view.transform=CGAffineTransformMakeScale(lastScaleFactor+(factor-1), (lastScaleFactor+(factor-1)));  

78.                                                              

79.       }else{  

80.           //缩小  

81.           sender.view.transform=CGAffineTransformMakeScale(lastScaleFactor*factor, lastScaleFactor*factor);  

82.                                                              

83.       }  

84.       //状态是否结束,如果结束保存数据  

85.       if(sender.state==UIGestureRecognizerStateEnded){  

86.           if(factor>1){  

87.               lastScaleFactor+=(factor-1);  

88.           }else{  

89.               lastScaleFactor*=factor;  

90.           }  

91.       }  

92.   }  

93.   //旋转手势  

94.   -(IBAction)handleRotateGesture:(UIGestureRecognizer*)sender{  

95.       //浮点类型,得到sender的旋转度数  

96.       CGFloat rotation=[(UIRotationGestureRecognizer*)sender rotation];  

97.       //旋转角度CGAffineTransformMakeRotation  

98.       CGAffineTransform transform=CGAffineTransformMakeRotation(rotation+netRotation);  

99.       //改变图像角度  

100.      sender.view.transform=transform;  

101.      //状态结束,保存数据  

102.      if(sender.state==UIGestureRecognizerStateEnded){  

103.          netRotation+=rotation;  

104.      }  

105.         

106.  }  

107.  //拖手势  

108.  -(IBAction)handlePanGesture:(UIGestureRecognizer*)sender{  

109.      //得到拖的过程中的xy坐标  

110.      CGPoint translation=[(UIPanGestureRecognizer*)sender translationInView:imageView];  

111.      //平移图片CGAffineTransformMakeTranslation  

112.      sender.view.transform=CGAffineTransformMakeTranslation(netTranslation.x+translation.x, netTranslation.y+translation.y);  

113.      //状态结束,保存数据  

114.      if(sender.state==UIGestureRecognizerStateEnded){  

115.          netTranslation.x+=translation.x;  

116.          netTranslation.y+=translation.y;  

117.      }  

118.        

119.  }  

120.  //划动手势  

121.  -(IBAction)handleSwipeGesture:(UIGestureRecognizer*)sender{  

122.      //划动的方向  

123.      UISwipeGestureRecognizerDirection direction=[(UISwipeGestureRecognizer*) sender direction];  

124.      //判断是上下左右  

125.      switch (direction) {  

126.          case UISwipeGestureRecognizerDirectionUp:  

127.              NSLog(@"up");  

128.              break;  

129.          case UISwipeGestureRecognizerDirectionDown:  

130.              NSLog(@"down");  

131.              break;  

132.          case UISwipeGestureRecognizerDirectionLeft:  

133.              NSLog(@"left");  

134.              imageIndex++;//下标++  

135.              break;  

136.          case UISwipeGestureRecognizerDirectionRight:  

137.              NSLog(@"right");  

138.              imageIndex--;//下标--  

139.              break;  

140.          default:  

141.              break;  

142.      }  

143.      //得到不越界不<0的下标  

144.      imageIndex=(imageIndex<0)?([images count]-1):imageIndex%[images count];  

145.      //imageView显示图片  

146.      imageView.image=[UIImage imageNamed:[images objectAtIndex:imageIndex]];  

147.        

148.  }  

149.  //长按手势  

150.  -(IBAction)handleLongpressGesture:(UIGestureRecognizer*)sender{  

151.      //创建警告  

152.      UIActionSheet *actionSheet=[[UIActionSheet alloc]initWithTitle:@"Image options" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"Save Image",@"Copy", nil];  

153.      //当前view显示警告  

154.      [actionSheet showInView:self.view];  

155.      [actionSheet release];  

156.  }  

157.  -(void)dealloc{  

158.      [images release];  

159.      [imageView release];  

160.      [super dealloc];  

161.  }  

 

分享到:
评论

相关推荐

    Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍

    在Swift中,我们可以使用内置的手势识别类(UIGestureRecognizer)来实现各种用户交互操作,如点击、双击、捏合、旋转、拖动、滑动以及长按。以下是对这些手势的详细介绍和示例代码。 1. **UITapGestureRecognizer ...

    简单手势识别实例(IOS5.0)

    在iOS开发中,手势识别是实现用户交互的关键技术之一,特别是在iOS 5.0及更高版本中,苹果引入了更加直观和便捷的方式来集成手势识别。本教程将详细讲解如何在UIViewController中使用简单手势识别,主要关注...

    iOS手势识别的详细使用方法(拖动,缩放,旋转,点击,手势依赖,自定义手势)

    - UILongPressGestureRecognizer:识别长按(Long Press)手势。 2. 使用手势的步骤 使用手势识别通常涉及以下两个主要步骤: - 创建手势实例:根据需要选择适当的手势子类,并实例化它。同时,你需要指定一个处理...

    用于iPhone的简单Objective-C手势识别器_Objective-C_下载.zip

    本资源“用于iPhone的简单Objective-C手势识别器_Objective-C_下载.zip”包含了一个名为“GLGestureRecognizer-master”的项目,旨在帮助开发者理解和实现手势识别功能。手势识别是iOS应用中的重要组成部分,它允许...

    iphone手势识别和手绘图线

    iPhone设备上的手势识别技术允许用户通过简单的触摸屏幕动作与应用进行交互,如滑动(Swipe)、轻拍(Tap)、双击(Double Tap)、捏合(Pinch)、旋转(Rotate)等。这些手势不仅提升了用户的操作体验,也为开发者...

    objective-c 手势识别实现

    在上面的代码中,我们创建了一个双击手势识别器,并将其添加到指定的视图上。`handleTap:`是响应轻拍手势的处理方法。 实现手势识别的回调方法,如下所示: ```objc - (void)handleTap:(UITapGestureRecognizer *)...

    在Swift程序中实现手势识别的方法

    在Swift程序中实现手势识别是iOS应用开发中的一个重要部分,它可以极大地增强用户的交互体验。Swift提供了多种内置的手势识别类,使得开发者能够轻松地识别和处理用户的各种触摸操作。以下是一份详细的指南,介绍...

    ios 常见手势

    ### 三、双击手势(UITapGestureRecognizer) 双击手势用于检测用户在特定区域连续快速点击两次。双击手势常用于放大缩小图片、切换视图或者关闭窗口。 **实现双击手势:** ```swift let doubleTapGesture = ...

    手势识别器之敲击

    "手势识别器之敲击"是一个典型的iOS开发示例,专注于讲解如何实现敲击(Tap Gesture)的识别功能。在这个Demo中,我们将深入探讨敲击手势的基本概念、实现过程以及在实际应用中的用途。 首先,敲击手势(Tap ...

    28-手势识别.zip

    4. **旋转(Rotate)**: UIRotationGestureRecognizer识别手指旋转手势。 5. **滑动(Swipe)**: UISwipeGestureRecognizer用于快速滑动,可识别上滑、下滑、左滑、右滑。 二、添加手势识别器 要为视图添加手势...

    触屏手势识别

    触屏手势识别是现代智能设备,尤其是智能手机和平板电脑中不可或缺的一部分。这一技术使得用户可以通过在屏幕上执行特定的手势来实现各种操作,极大地提升了人机交互的效率和体验。手势识别涉及计算机视觉、机器学习...

    iOS手势代码(旋转、缩放、拖拽等)

    双击手势类似,只需更改`numberOfTapsRequired`属性: ```swift let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(handleDoubleTap)) doubleTapGesture.numberOfTapsRequired = 2 ...

    触摸手势识别

    1. 基本手势:触摸手势主要包括滑动(Swipe)、点击(Tap)、双击(Double Tap)、长按(Long Press)、捏合缩放(Pinch to Zoom)、旋转(Rotate)等。这些基本手势对应不同的操作指令,如滑动用于页面切换,双击...

    uiview随手势旋转

    `UIGestureRecognizer`是iOS SDK中处理用户触摸事件的基础类,它提供了多种手势类型,如轻拍(UITapGestureRecognizer)、滑动(UISwipeGestureRecognizer)和长按(UILongPressGestureRecognizer)等。而`...

    iOS仿iphone手机相册手势滑动多选照片功能.zip

    3. **手势识别(GestureRecognizer)**:iOS提供多种手势识别类,如UIPanGestureRecognizer、UITapGestureRecognizer等。在这个项目中,可以使用UIPanGestureRecognizer监听用户对图片的滑动手势。当用户滑动时,...

    ios-手势控制:点击、滑动、平移、捏合、旋转、长按、轻扫.zip

    手势识别器(Gesture Recognizer)用于识别触摸序列并触发响应事件。当手势识别器识别到一个手势或手势发生变化时,会触发响应事件。UIGestureRecognizer类作为抽象类,不能直接使用。只能使用UIGestureRecognizer的...

    ios源码之整合cocos2d手势识别-GestureRecognizers.rar

    在iOS SDK中,`UIGestureRecognizer`是手势识别的核心类,它提供了多种内置手势类型,如轻拍(Tap)、滑动(Swipe)、长按(Long Press)、捏合(Pinch)和旋转(Rotation)。开发者可以将这些手势添加到视图...

    iOS开发之手势识别

    6. UILongPressGestureRecognizer:识别长按手势。 二、UIGestureRecognizer属性 手势识别器有多个关键属性,包括: - state:表示手势的状态,例如Possible、Began、Changed、Ended、Cancelled、Failed和...

    通过手势控制图片的缩放、移动、旋转

    在iOS中,手势识别主要由`UIPanGestureRecognizer`(拖动)、`UITapGestureRecognizer`(点击)、`UIPinchGestureRecognizer`(捏合)、`UIRotationGestureRecognizer`(旋转)和`UISwipeGestureRecognizer`(滑动)...

    七大手势的综合使用,添加手势前,移除所有手势,动画效果

    这七大手势通常指的是:单击(Tap)、双击(Double Tap)、长按(Long Press)、滑动(Swipe)、拖拽(Pan)、捏合(Pinch)和旋转(Rotation)。 1. **单击(Tap)**:单击手势是最基础的手势,用于响应用户的轻触...

Global site tag (gtag.js) - Google Analytics