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中關(guān)于Taptic-Engine震動(dòng)反饋的深入解析
這篇文章主要給大家介紹了關(guān)于iOS中關(guān)于Taptic-Engine震動(dòng)反饋的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11iOS13即將到來,iOS推送DeviceToken適配方案詳解
這篇文章主要介紹了iOS13即將到來,iOS推送DeviceToken適配方案詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09iOS應(yīng)用開發(fā)中矢量圖的使用及修改矢量圖顏色的方法
這篇文章主要介紹了iOS應(yīng)用開發(fā)中矢量圖的使用及修改矢量圖顏色的方法,文中的方法是在Adobe Illustrator中繪制矢量圖然后導(dǎo)入Xcode中使用,需要的朋友可以參考下2016-03-03使用AVFoundation實(shí)現(xiàn)視頻錄制詳解
這篇文章主要介紹了使用AVFoundation實(shí)現(xiàn)視頻錄制詳解的相關(guān)資料,需要的朋友可以參考下2022-09-09iOS開發(fā)之TextField禁用粘貼、選擇和全選功能
這篇文章主要為大家詳細(xì)介紹了iOS開發(fā)之TextField禁用粘貼、選擇和全選功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09