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. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值