IOS 手势识别
六種手勢(shì)識(shí)別:輕擊手勢(shì)(TapGestureRecognizer),輕掃手勢(shì) (SwipeGestureRecognizer), 長(zhǎng)按手勢(shì)(LongPressGestureRecognizer), ?拖動(dòng)手勢(shì)(PanGestureRecognizer), 捏合手勢(shì)(PinchGestureRecognizer),旋轉(zhuǎn)手勢(shì)(RotationGestureRecognizer);
其實(shí)這些手勢(shì)用touche事件完全可以實(shí)現(xiàn),蘋果就是把常用的觸摸事件封裝成手勢(shì),來(lái)提供給用戶。讀者完全可以用TouchesMoved來(lái)寫拖動(dòng)手勢(shì)等
一,用storyboard給控件添加手勢(shì)識(shí)別
1.用storyboard添加手勢(shì)識(shí)別,和添加一個(gè)Button的步驟一樣,首先我們得找到相應(yīng)的手勢(shì),把手勢(shì)識(shí)別的控件拖到我們要添加手勢(shì)的控件中,截圖如下:
2.給我們拖出的手勢(shì)添加回調(diào)事件,和給Button回調(diào)事件沒(méi)啥區(qū)別的,在回調(diào)方法中添加要實(shí)現(xiàn)的業(yè)務(wù)邏輯即可,截圖如下:
?
二,純代碼添加手勢(shì)識(shí)別
用storyboard可以大大簡(jiǎn)化我們的操作,不過(guò)純代碼的方式還是要會(huì)的,就像要Dreamwear編輯網(wǎng)頁(yè)一樣(當(dāng)然啦,storyboard的拖拽功能要比Dreamwear的拖拽強(qiáng)大的多),用純代碼敲出來(lái)的更為靈活,更加便 于維護(hù)。不過(guò)用storyboard可以減少我們的工作量,這兩個(gè)要配合著使用才能大大的提高我們的開(kāi)發(fā)效率。個(gè)人感覺(jué)用storyboard把框架搭起 來(lái)(Controller間的關(guān)系),一下小的東西還是用純代碼敲出來(lái)更好一些。下面就給出如何給我們的控件用純代碼的方式來(lái)添加手勢(shì)識(shí)別。
1.輕擊手勢(shì)(TapGestureRecognizer)的添加
初始化代碼TapGestureRecongnizer的代碼如下:
| 1 2 3 4 5 6 | //新建tap手勢(shì) ????UITapGestureRecognizer?*tapGesture?=?[[UITapGestureRecognizer?alloc]?initWithTarget:self?action:@selector(tapGesture:)]; ????//設(shè)置點(diǎn)擊次數(shù)和點(diǎn)擊手指數(shù) ????tapGesture.numberOfTapsRequired?=?1;?//點(diǎn)擊次數(shù) ????tapGesture.numberOfTouchesRequired?=?1;?//點(diǎn)擊手指數(shù) ????[self.view?addGestureRecognizer:tapGesture]; |
在回調(diào)方法中添加相應(yīng)的業(yè)務(wù)邏輯:
| 1 2 3 4 5 | //輕擊手勢(shì)觸發(fā)方法 -(void)tapGesture:(id)sender { ????//輕擊后要做的事情???????? } |
2.長(zhǎng)按手勢(shì)(LongPressGestureRecognizer)
初始化代碼:
| 1 2 3 4 5 | //添加長(zhǎng)摁手勢(shì) ????UILongPressGestureRecognizer?*longPressGesture?=?[[UILongPressGestureRecognizer?alloc]?initWithTarget:self?action:@selector(longPressGesture:)]; ????//設(shè)置長(zhǎng)按時(shí)間 ????longPressGesture.minimumPressDuration?=?0.5;?//(2秒) ????[self.view?addGestureRecognizer:longPressGesture]; |
在對(duì)應(yīng)的回調(diào)方法中添加相應(yīng)的方法(當(dāng)手勢(shì)開(kāi)始時(shí)執(zhí)行):
| 1 2 3 4 5 6 7 8 9 10 | //常摁手勢(shì)觸發(fā)方法 -(void)longPressGesture:(id)sender { ????UILongPressGestureRecognizer?*longPress?=?sender; ????if?(longPress.state?==?UIGestureRecognizerStateBegan) ????{ ????????UIAlertView?*alter?=?[[UIAlertView?alloc]?initWithTitle:@"提示"?message:@"長(zhǎng)按觸發(fā)"?delegate:nil?cancelButtonTitle:@"取消"?otherButtonTitles:?nil]; ????????[alter?show]; ????} } |
代碼說(shuō)明:手勢(shì)的常用狀態(tài)如下
-
開(kāi)始:UIGestureRecognizerStateBegan
-
改變:UIGestureRecognizerStateChanged
-
結(jié)束:UIGestureRecognizerStateEnded
-
取消:UIGestureRecognizerStateCancelled
-
失敗:UIGestureRecognizerStateFailed
3.輕掃手勢(shì)(SwipeGestureRecognizer)
在初始化輕掃手勢(shì)的時(shí)候得指定輕掃的方向,上下左右。 如果要要添加多個(gè)輕掃方向,就得添加多個(gè)輕掃手勢(shì),不過(guò)回調(diào)的是同一個(gè)方法。
添加輕掃手勢(shì),一個(gè)向左一個(gè)向右,代碼如下:
| 1 2 3 4 5 6 7 8 9 10 11 | //添加輕掃手勢(shì) ????UISwipeGestureRecognizer?*swipeGesture?=?[[UISwipeGestureRecognizer?alloc]?initWithTarget:self?action:@selector(swipeGesture:)]; ????//設(shè)置輕掃的方向 ????swipeGesture.direction?=?UISwipeGestureRecognizerDirectionRight;?//默認(rèn)向右 ????[self.view?addGestureRecognizer:swipeGesture]; ????? ????//添加輕掃手勢(shì) ????UISwipeGestureRecognizer?*swipeGestureLeft?=?[[UISwipeGestureRecognizer?alloc]?initWithTarget:self?action:@selector(swipeGesture:)]; ????//設(shè)置輕掃的方向 ????swipeGestureLeft.direction?=?UISwipeGestureRecognizerDirectionLeft;?//默認(rèn)向右 ????[self.view?addGestureRecognizer:swipeGestureLeft]; |
回調(diào)方法如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | //輕掃手勢(shì)觸發(fā)方法 -(void)swipeGesture:(id)sender { ????UISwipeGestureRecognizer?*swipe?=?sender; ????if?(swipe.direction?==?UISwipeGestureRecognizerDirectionLeft) ????{ ????????//向左輕掃做的事情 ????} ????if?(swipe.direction?==?UISwipeGestureRecognizerDirectionRight) ????{ ????????//向右輕掃做的事情 ????} } |
4.捏合手勢(shì)(PinchGestureRecognizer)
捏合手勢(shì)初始化
| 1 2 3 | //添加捏合手勢(shì) UIPinchGestureRecognizer?*pinchGesture?=?[[UIPinchGestureRecognizer?alloc]?initWithTarget:self?action:@selector(pinchGesture:)]; [self.view?addGestureRecognizer:pinchGesture]; |
捏合手勢(shì)要觸發(fā)的方法(放大或者縮小圖片):
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 捏合手勢(shì)觸發(fā)方法 -(void)?pinchGesture:(id)sender { ?????UIPinchGestureRecognizer?*gesture?=?sender; ????? ????//手勢(shì)改變時(shí) ????if?(gesture.state?==?UIGestureRecognizerStateChanged) ????{ ????????//捏合手勢(shì)中scale屬性記錄的縮放比例 ????????_imageView.transform?=?CGAffineTransformMakeScale(gesture.scale,?gesture.scale); ????} ????? ????//結(jié)束后恢復(fù) ????if(gesture.state==UIGestureRecognizerStateEnded) ????{ ????????[UIView?animateWithDuration:0.5?animations:^{ ????????????_imageView.transform?=?CGAffineTransformIdentity;//取消一切形變 ????????}]; ????} } |
5.拖動(dòng)手勢(shì)(PanGestureRecognizer)
拖動(dòng)手勢(shì)的初始化
| 1 2 3 | //添加拖動(dòng)手勢(shì) UIPanGestureRecognizer?*panGesture?=?[[UIPanGestureRecognizer?alloc]?initWithTarget:self?action:@selector(panGesture:)]; [self.view?addGestureRecognizer:panGesture]; |
拖動(dòng)手勢(shì)要做的方法(通過(guò)translationInView獲取移動(dòng)的點(diǎn),和TouchesMoved方法類似)
| 1 2 3 4 5 6 7 8 9 | //拖動(dòng)手勢(shì) -(void)?panGesture:(id)sender { ????UIPanGestureRecognizer?*panGesture?=?sender; ????? ????CGPoint?movePoint?=?[panGesture?translationInView:self.view]; ????? ????//做你想做的事兒 } |
6.旋轉(zhuǎn)手勢(shì)(RotationGestureRecognizer)
旋轉(zhuǎn)手勢(shì)的初始化
| 1 2 3 | //添加旋轉(zhuǎn)手勢(shì) UIRotationGestureRecognizer?*rotationGesture?=?[[UIRotationGestureRecognizer?alloc]?initWithTarget:self?action:@selector(rotationGesture:)]; [self.view?addGestureRecognizer:rotationGesture]; |
旋轉(zhuǎn)手勢(shì)調(diào)用的方法:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | //旋轉(zhuǎn)手勢(shì) -(void)rotationGesture:(id)sender { ????? ????UIRotationGestureRecognizer?*gesture?=?sender; ????? ????if?(gesture.state==UIGestureRecognizerStateChanged) ????{ ????????_imageView.transform=CGAffineTransformMakeRotation(gesture.rotation); ????} ????? ????if(gesture.state==UIGestureRecognizerStateEnded) ????{ ????????? ????????[UIView?animateWithDuration:1?animations:^{ ????????????_imageView.transform=CGAffineTransformIdentity;//取消形變 ????????}]; ????} ????? } |
上面的東西沒(méi)有多高深的技術(shù),就是對(duì)iOS開(kāi)發(fā)中的手勢(shì)做了一下小小的總結(jié),溫故一下基礎(chǔ)知識(shí)。在之前的博客中也有用到手勢(shì)識(shí)別的內(nèi)容,就是沒(méi)有系統(tǒng)的梳理一下手勢(shì)識(shí)別的知識(shí),本文做一個(gè)基礎(chǔ)的補(bǔ)充吧。
轉(zhuǎn)自:http://www.cocoachina.com/ios/20140922/9711.html
總結(jié)
- 上一篇: c语言画伯努利分布图像,C++ - 随机
- 下一篇: java获取字典所有的key_java字