IOS 手勢(shì)操作詳解及實(shí)例總結(jié)篇
iOS手勢(shì)操作總結(jié)
手勢(shì)操作種類
- UITapGestureRecognizer: 敲擊,點(diǎn)擊
- UILongPressGestureRecognizer: 長按
- UIPinchGestureRecognizer: 縮放
- UIRotationGestureRecognizer: 旋轉(zhuǎn)
- UISwipeGestureRecongizer: 輕掃
- UIPanGestureRecognizer: 拖拽
手勢(shì)操作的代理方法(UIGestureRecognizerDelegate)
手勢(shì)可能發(fā)生的條件,返回NO可以阻止此手勢(shì)的發(fā)生或者此手勢(shì)不產(chǎn)生任何效果
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;
是否允許多個(gè)手勢(shì)同時(shí)發(fā)生
- (BOOL)gestureRecognizer:(UIGestureRecognizer *) gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *)otherGestureRecognizer;
UITapGestureRecognier敲擊,點(diǎn)擊手勢(shì)
- 設(shè)置屬性numberOfTapsRequired可以指定需要幾根手指才能觸發(fā)事件
- numberOfTouchesRequired:可以設(shè)置需要敲擊幾次觸發(fā)事件
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]; // 設(shè)置代理 tap.delegate = self; // 設(shè)置點(diǎn)擊次數(shù)觸發(fā)手勢(shì)事件 tap.numberOfTapsRequired = 1; // 設(shè)置需要點(diǎn)擊的手指數(shù) tap.numberOfTouchesRequired = 1; [self.image addGestureRecognizer:tap];
UILongPressGestureRecongnizer長按
- minimumPressDuration設(shè)置長按的最小間隔時(shí)間,也就是說按下開始和手指離開時(shí)的中間間隔,如果小于這個(gè)值則不會(huì)被認(rèn)為是長按操作
- allowableMovement:長按過程中是否允許移動(dòng)
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)]; // 代理 longPress.delegate = self; // 設(shè)置最小間隔時(shí)間, 手指按下與離開間隔時(shí)間 longPress.minimumPressDuration = 1.0; // 按下過程中允許移動(dòng)的像素 longPress.allowableMovement = 30; [self.image addGestureRecognizer:longPress];
UIPinchGestureRecognizer縮放手勢(shì)
scale: 設(shè)置縮放比例,相對(duì)于原來大小
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)]; // 代理 pinch.delegate = self; // 設(shè)置縮放比例 pinch.scale = 1.2; [self.image addGestureRecognizer:pinch];
UIRotationGestureRecognizer旋轉(zhuǎn)手勢(shì)
rotation: 旋轉(zhuǎn)弧度,要保證每次都在上一次位置開始旋轉(zhuǎn),而不是回歸初始位置,必須要在動(dòng)作方法里將此值清零
- (void)setupRotation
{
UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotation:)];
// 設(shè)置代理
rotation.delegate = self;
[self.image addGestureRecognizer:rotation];
}
- (void)rotation:(UIRotationGestureRecognizer *)rotation
{
// 旋轉(zhuǎn)角度
CGFloat radian = rotation.rotation;
self.image.transform = CGAffineTransformRotate(self.image.transform, radian);
// 復(fù)位,保證每次都是在上一次位置開始轉(zhuǎn),而不是每次都回歸初始位置再轉(zhuǎn)
rotation.rotation = 0;
}
UISwipeGestureRecognizer輕掃, 手指按下然后在屏幕上滑動(dòng)
輕掃分四個(gè)方向(上下左右),并且如果要在一個(gè)控件上同時(shí)添加一個(gè)以上的輕掃動(dòng)作,必須對(duì)每個(gè)動(dòng)作添加一個(gè)對(duì)象。也就是說每個(gè)方向的動(dòng)作對(duì)應(yīng)一個(gè)對(duì)象。
direction: 指定輕掃動(dòng)作的方向
typedef NS_OPTIONS(NSUInteger, UISwipeGestureRecognizerDirection) {
UISwipeGestureRecognizerDirectionRight = 1 << 0, // 從左向右
UISwipeGestureRecognizerDirectionLeft = 1 << 1, // 從右向左
UISwipeGestureRecognizerDirectionUp = 1 << 2, // 從下往上
UISwipeGestureRecognizerDirectionDown = 1 << 3 // 從上往下
};
UISwipeGestureRecognizer *swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)]; // 設(shè)置代理 swipeUp.delegate = self; // 修改方向, 從下往上 swipeUp.direction = UISwipeGestureRecognizerDirectionUp; [self.image addGestureRecognizer:swipeUp]; // 添加其他方向手勢(shì) UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)]; // 修改方向, 從下往上 swipeDown.direction = UISwipeGestureRecognizerDirectionDown; [self.image addGestureRecognizer:swipeDown];
UIPanGestureRecognizer拖拽,按下拖動(dòng)控件操作
注意點(diǎn):手勢(shì)的觸摸點(diǎn)locationInView和手勢(shì)的移動(dòng)點(diǎn)translationInView是不一樣的,前者是用locationInView取得是指手指在當(dāng)前控件中的坐標(biāo),后者表示相對(duì)于父view的rect
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)]; // 設(shè)置代理 pan.delegate = self; [self.image addGestureRecognizer:pan];
// 手勢(shì)的觸摸點(diǎn) // CGPoint p = [pan locationInView:self.image]; // 手勢(shì)的移動(dòng)點(diǎn)(每次移動(dòng)的位移點(diǎn)) CGPoint transP = [pan translationInView:self.image]; NSLog(@"%f, %f", transP.x, transP.y); self.image.transform = CGAffineTransformTranslate(self.image.transform, transP.x, transP.y); // 復(fù)位 [pan setTranslation:CGPointZero inView:self.image];
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- ios的手勢(shì)操作之UIGestureRecognizer淺析(推薦)
- IOS 七種手勢(shì)操作(拖動(dòng)、捏合、旋轉(zhuǎn)、點(diǎn)按、長按、輕掃、自定義)詳解及實(shí)例代碼
- iOS開發(fā)中的幾個(gè)手勢(shì)操作實(shí)例分享
- IOS手勢(shì)操作(拖動(dòng)、捏合、旋轉(zhuǎn)、點(diǎn)按、長按、輕掃、自定義)
- IOS開發(fā)代碼分享之設(shè)置UISearchBar的背景顏色
- IOS獲取各種文件目錄路徑的方法
- iOS開發(fā)中實(shí)現(xiàn)顯示gif圖片的方法
- IOS開發(fā)代碼分享之用nstimer實(shí)現(xiàn)倒計(jì)時(shí)功能
- iOS開發(fā)之路--仿網(wǎng)易抽屜效果
- iOS中使用schema協(xié)議調(diào)用APP和使用iframe打開APP的例子
- iOS開發(fā)中使用UILabel設(shè)置字體的相關(guān)技巧小結(jié)
相關(guān)文章
詳解iOS多線程之2.NSThread的加鎖@synchronized
這篇文章主要介紹了詳解iOS多線程之2.NSThread的加鎖@synchronized,有需要的小伙伴可以參考下。2016-11-11
利用iOS手勢(shì)與scrollView代理實(shí)現(xiàn)圖片的放大縮小
這篇文章主要介紹了利用iOS的手勢(shì)、scrollView代理來實(shí)現(xiàn)圖片放大縮小的方法,文中通過示例代碼介紹的很詳細(xì),相信對(duì)各位iOS開發(fā)者們來說具有一定的參考借鑒價(jià)值,有需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。2017-01-01
解決Flutter出現(xiàn)CocoaPods報(bào)錯(cuò)情況(Mac和IOS)
這篇文章主要為大家介紹了解決Flutter出現(xiàn)CocoaPods報(bào)錯(cuò)情況(Mac和IOS)的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
ios學(xué)習(xí)筆記之基礎(chǔ)數(shù)據(jù)類型的轉(zhuǎn)換
在編碼過程中,數(shù)據(jù)的處理是必要的。眾多數(shù)據(jù)中,NSString、NSData、NSArray、 NSDictionary等數(shù)據(jù)類型是常用的,對(duì)付它們?nèi)菀?,但是在多個(gè)數(shù)據(jù)類型之間轉(zhuǎn)換就需要技巧了。本文主要給大家介紹ios中基礎(chǔ)數(shù)據(jù)類型的轉(zhuǎn)換,有需要的下面來一起看看吧。2016-11-11
iOS UILabel 設(shè)置內(nèi)容的間距及高度的計(jì)算示例
本篇文章主要介紹了iOS UILabel 設(shè)置內(nèi)容的間距及高度的計(jì)算示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11
詳解Swift中對(duì)C語言接口緩存的使用以及數(shù)組與字符串轉(zhuǎn)為指針類型的方法
這篇文章主要介紹了詳解Swift中對(duì)C語言接口緩存的使用以及數(shù)組與字符串轉(zhuǎn)為指針類型的方法的相關(guān)資料,這里提供簡單實(shí)例,代碼注釋介紹也清楚,需要的朋友可以參考下2017-07-07
iOS獲取當(dāng)前設(shè)備型號(hào)等信息(全)包含iPhone7和iPhone7P
這篇文章主要介紹了iOS獲取當(dāng)前設(shè)備型號(hào)設(shè)備信息的總結(jié)包含iPhone7和iPhone7P,包括ios7之前之后的獲取方式,本文接的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10

