IOS 手勢操作詳解及實例總結(jié)篇
iOS手勢操作總結(jié)
手勢操作種類
- UITapGestureRecognizer: 敲擊,點擊
- UILongPressGestureRecognizer: 長按
- UIPinchGestureRecognizer: 縮放
- UIRotationGestureRecognizer: 旋轉(zhuǎn)
- UISwipeGestureRecongizer: 輕掃
- UIPanGestureRecognizer: 拖拽
手勢操作的代理方法(UIGestureRecognizerDelegate)
手勢可能發(fā)生的條件,返回NO可以阻止此手勢的發(fā)生或者此手勢不產(chǎn)生任何效果
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;
是否允許多個手勢同時發(fā)生
- (BOOL)gestureRecognizer:(UIGestureRecognizer *) gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *)otherGestureRecognizer;
UITapGestureRecognier敲擊,點擊手勢
- 設(shè)置屬性numberOfTapsRequired可以指定需要幾根手指才能觸發(fā)事件
- numberOfTouchesRequired:可以設(shè)置需要敲擊幾次觸發(fā)事件
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]; // 設(shè)置代理 tap.delegate = self; // 設(shè)置點擊次數(shù)觸發(fā)手勢事件 tap.numberOfTapsRequired = 1; // 設(shè)置需要點擊的手指數(shù) tap.numberOfTouchesRequired = 1; [self.image addGestureRecognizer:tap];
UILongPressGestureRecongnizer長按
- minimumPressDuration設(shè)置長按的最小間隔時間,也就是說按下開始和手指離開時的中間間隔,如果小于這個值則不會被認(rèn)為是長按操作
- allowableMovement:長按過程中是否允許移動
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)]; // 代理 longPress.delegate = self; // 設(shè)置最小間隔時間, 手指按下與離開間隔時間 longPress.minimumPressDuration = 1.0; // 按下過程中允許移動的像素 longPress.allowableMovement = 30; [self.image addGestureRecognizer:longPress];
UIPinchGestureRecognizer縮放手勢
scale: 設(shè)置縮放比例,相對于原來大小
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)]; // 代理 pinch.delegate = self; // 設(shè)置縮放比例 pinch.scale = 1.2; [self.image addGestureRecognizer:pinch];
UIRotationGestureRecognizer旋轉(zhuǎn)手勢
rotation: 旋轉(zhuǎn)弧度,要保證每次都在上一次位置開始旋轉(zhuǎn),而不是回歸初始位置,必須要在動作方法里將此值清零
- (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輕掃, 手指按下然后在屏幕上滑動
輕掃分四個方向(上下左右),并且如果要在一個控件上同時添加一個以上的輕掃動作,必須對每個動作添加一個對象。也就是說每個方向的動作對應(yīng)一個對象。
direction: 指定輕掃動作的方向
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]; // 添加其他方向手勢 UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)]; // 修改方向, 從下往上 swipeDown.direction = UISwipeGestureRecognizerDirectionDown; [self.image addGestureRecognizer:swipeDown];
UIPanGestureRecognizer拖拽,按下拖動控件操作
注意點:手勢的觸摸點locationInView和手勢的移動點translationInView是不一樣的,前者是用locationInView取得是指手指在當(dāng)前控件中的坐標(biāo),后者表示相對于父view的rect
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)]; // 設(shè)置代理 pan.delegate = self; [self.image addGestureRecognizer:pan];
// 手勢的觸摸點 // CGPoint p = [pan locationInView:self.image]; // 手勢的移動點(每次移動的位移點) 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];
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- ios的手勢操作之UIGestureRecognizer淺析(推薦)
- IOS 七種手勢操作(拖動、捏合、旋轉(zhuǎn)、點按、長按、輕掃、自定義)詳解及實例代碼
- iOS開發(fā)中的幾個手勢操作實例分享
- IOS手勢操作(拖動、捏合、旋轉(zhuǎn)、點按、長按、輕掃、自定義)
- IOS開發(fā)代碼分享之設(shè)置UISearchBar的背景顏色
- IOS獲取各種文件目錄路徑的方法
- iOS開發(fā)中實現(xiàn)顯示gif圖片的方法
- IOS開發(fā)代碼分享之用nstimer實現(xiàn)倒計時功能
- 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震動反饋的深入解析
這篇文章主要給大家介紹了關(guān)于iOS中關(guān)于Taptic-Engine震動反饋的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11iOS13即將到來,iOS推送DeviceToken適配方案詳解
這篇文章主要介紹了iOS13即將到來,iOS推送DeviceToken適配方案詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09iOS應(yīng)用開發(fā)中矢量圖的使用及修改矢量圖顏色的方法
這篇文章主要介紹了iOS應(yīng)用開發(fā)中矢量圖的使用及修改矢量圖顏色的方法,文中的方法是在Adobe Illustrator中繪制矢量圖然后導(dǎo)入Xcode中使用,需要的朋友可以參考下2016-03-03iOS開發(fā)之TextField禁用粘貼、選擇和全選功能
這篇文章主要為大家詳細(xì)介紹了iOS開發(fā)之TextField禁用粘貼、選擇和全選功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09