IOS中各種手勢操作實(shí)例代碼
先看下效果
手勢相關(guān)的介紹
IOS中手勢操作一般是 UIGestureRecognizer 類的幾個手勢子類去實(shí)現(xiàn),一般我們用到的手勢就這么5種:
1、點(diǎn)擊 UITapGestureRecognizer
2、平移 UIPanGestureRecognizer
3、縮放 UIPinchGestureRecognizer
4、旋轉(zhuǎn) UIRotationGestureRecognizer
5、輕掃 UISwipeGestureRecognizer
我們上面這個實(shí)例中就用到了上面這5種手勢,不過其中 點(diǎn)擊與輕掃沒有體現(xiàn)出來,只是輸出了下日志而已,一會看代碼
下面我們來分別介紹下這幾種手勢
1、UITapGestureRecognizer 點(diǎn)擊手勢
UITapGestureRecognizer* tapGes = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGes:)]; // 點(diǎn)擊次數(shù),默認(rèn)為1,1為單擊,2為雙擊 tapGes.numberOfTapsRequired = 2;
這個點(diǎn)擊手勢類有一個屬性 numberOfTapsRequired 用于設(shè)置點(diǎn)擊數(shù),就是點(diǎn)擊幾次才觸發(fā)這個事件
2、UIPanGestureRecognizer 平移手勢
// 平移手勢 - (void)initPanGes{ UIPanGestureRecognizer* panGes = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGes:)]; [self.imgView addGestureRecognizer:panGes]; } - (void)panGes:(UIPanGestureRecognizer*)ges{ // 獲取平移的坐標(biāo)點(diǎn) CGPoint transPoint = [ges translationInView:self.imgView]; }
平移手勢本身沒太多可設(shè)置的屬性,在平移事件觸發(fā)手,可以用 translationInView 方法獲取當(dāng)前平移坐標(biāo)點(diǎn)
3、UIPinchGestureRecognizer 縮放手勢
// 縮放手勢 - (void)initPinGes{ UIPinchGestureRecognizer* pinGes = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinGes:)]; [self.imgView addGestureRecognizer:pinGes]; } - (void)pinGes:(UIPinchGestureRecognizer*)ges{ // 縮放 self.imgView.transform = CGAffineTransformScale(self.imgView.transform, ges.scale, ges.scale); }
縮放手勢在事件里面可以獲取 scale 屬性,表示當(dāng)前縮放值
4、UIRotationGestureRecognizer 旋轉(zhuǎn)手勢
// 旋轉(zhuǎn)手勢 - (void)initRotation{ UIRotationGestureRecognizer* rotationGes = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGes:)]; [self.imgView addGestureRecognizer:rotationGes]; } - (void)rotationGes:(UIRotationGestureRecognizer*)ges{ // 旋轉(zhuǎn)圖片 self.imgView.transform = CGAffineTransformRotate(self.imgView.transform, ges.rotation); }
旋轉(zhuǎn)手勢在事件里面可以通過獲取 rotation 屬性獲取當(dāng)前旋轉(zhuǎn)的角度
5、UISwipeGestureRecognizer 輕掃手勢
// 輕掃手勢 - (void)initSwipeGes{ // 創(chuàng)建 從右向左 輕掃的手勢 UISwipeGestureRecognizer* swipeLeftGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)]; // 方向,默認(rèn)是從左往右 // 最多只能開啟一個手勢,如果要開啟多個就得創(chuàng)建多個手勢 // 監(jiān)聽從右向左的方向 swipeLeftGes.direction = UISwipeGestureRecognizerDirectionLeft; [self.imgView addGestureRecognizer:swipeLeftGes]; } - (void)swipeGes:(UISwipeGestureRecognizer*)ges{ // ges.direction方向值 NSLog(@"%s diection:%lu",__func__,(unsigned long)ges.direction); }
輕掃手勢對象需要設(shè)置 direction 屬性,默認(rèn)是只監(jiān)聽從左向右,這是一個枚舉值 UISwipeGestureRecognizerDirection
UISwipeGestureRecognizerDirectionRight 從左向右(默認(rèn)值) UISwipeGestureRecognizerDirectionLeft 從右向左 UISwipeGestureRecognizerDirectionUp 從下向上 UISwipeGestureRecognizerDirectionDown 從上向下
下面看一下我們上面那個效果圖實(shí)現(xiàn)代碼吧
// // ViewController.m // 各種手勢操作 // // Created by xgao on 16/3/24. // Copyright © 2016年 xgao. All rights reserved. // #import "ViewController.h" @interface ViewController ()<UIGestureRecognizerDelegate> @property (weak, nonatomic) IBOutlet UIImageView *imgView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [self initTapGes]; [self initPanGes]; [self initPinGes]; [self initRotation]; [self initSwipeGes]; } // 點(diǎn)擊手勢 - (void)initTapGes{ UITapGestureRecognizer* tapGes = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGes:)]; // 點(diǎn)擊次數(shù),默認(rèn)為1,1為單擊,2為雙擊 tapGes.numberOfTapsRequired = 2; tapGes.delegate = self; [self.imgView addGestureRecognizer:tapGes]; } - (void)tapGes:(UITapGestureRecognizer*)ges{ NSLog(@"%s",__func__); } // 平移手勢 - (void)initPanGes{ UIPanGestureRecognizer* panGes = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGes:)]; panGes.delegate = self; [self.imgView addGestureRecognizer:panGes]; } - (void)panGes:(UIPanGestureRecognizer*)ges{ // 獲取平移的坐標(biāo)點(diǎn) CGPoint transPoint = [ges translationInView:self.imgView]; // 在之前的基礎(chǔ)上移動圖片 self.imgView.transform = CGAffineTransformTranslate(self.imgView.transform, transPoint.x, transPoint.y); // 復(fù)原,必需復(fù)原 // 每次都清空一下消除坐標(biāo)疊加 [ges setTranslation:CGPointZero inView:self.imgView]; NSLog(@"%s",__func__); } // 縮放手勢 - (void)initPinGes{ UIPinchGestureRecognizer* pinGes = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinGes:)]; pinGes.delegate = self; [self.imgView addGestureRecognizer:pinGes]; } - (void)pinGes:(UIPinchGestureRecognizer*)ges{ // 縮放 self.imgView.transform = CGAffineTransformScale(self.imgView.transform, ges.scale, ges.scale); // 復(fù)原 // 每次都清空一下消除疊加 ges.scale = 1; } // 旋轉(zhuǎn)手勢 - (void)initRotation{ UIRotationGestureRecognizer* rotationGes = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGes:)]; rotationGes.delegate = self; [self.imgView addGestureRecognizer:rotationGes]; } - (void)rotationGes:(UIRotationGestureRecognizer*)ges{ // 旋轉(zhuǎn)圖片 self.imgView.transform = CGAffineTransformRotate(self.imgView.transform, ges.rotation); // 復(fù)原 // 每次都清空一下消除疊加 ges.rotation = 0; NSLog(@"%s",__func__); } // 輕掃手勢 - (void)initSwipeGes{ // 創(chuàng)建 從右向左 輕掃的手勢 UISwipeGestureRecognizer* swipeLeftGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)]; // 方向,默認(rèn)是從左往右 // 最多只能開啟一個手勢,如果要開啟多個就得創(chuàng)建多個手勢 // 監(jiān)聽從右向左的方向 swipeLeftGes.direction = UISwipeGestureRecognizerDirectionLeft; swipeLeftGes.delegate = self; [self.imgView addGestureRecognizer:swipeLeftGes]; // 創(chuàng)建 從下向上 輕掃的手勢 UISwipeGestureRecognizer* swipeUpGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)]; // 監(jiān)聽從下向上的方向 swipeUpGes.direction = UISwipeGestureRecognizerDirectionUp; swipeUpGes.delegate = self; [self.imgView addGestureRecognizer:swipeUpGes]; } - (void)swipeGes:(UISwipeGestureRecognizer*)ges{ // ges.direction方向值 NSLog(@"%s diection:%lu",__func__,(unsigned long)ges.direction); } #pragma mark - UIGestureRecognizerDelegate // 判斷是否能觸發(fā)手勢 - (BOOL)gestureRecognizerShouldBegin:(UITapGestureRecognizer *)gestureRecognizer{ return YES; } // 是否允許多手勢操作,不是多觸摸點(diǎn) - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ return YES; } @end
這里需要注意的有兩點(diǎn):
1、對于 平移、縮放、旋轉(zhuǎn) 這3個手勢,我們?nèi)绻盟闹等ヌ幚淼脑?,要記得?fù)原!復(fù)原!復(fù)原!這點(diǎn)很重要!重要的事說3遍~~
平移手勢里面我們需要設(shè)置 setTranslation:CGPointZero 來復(fù)原它的坐標(biāo)值,不然下一次事件觸發(fā)這個坐標(biāo)值會疊加
縮放手勢里面設(shè)置 ges.scale = 1 來復(fù)原它的縮放值
旋轉(zhuǎn)手勢里面設(shè)置 ges.rotation = 0 來復(fù)原它的角度值
2、假如我們需要多手勢一起用的時候就需要設(shè)置下delegate 里面的一個返回參數(shù)的方法了
// 是否允許多手勢操作,不是多觸摸點(diǎn) - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ return YES; }
以上所述是小編給大家介紹的IOS中各種手勢操作實(shí)例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
關(guān)于iOS中的各種顏色設(shè)置總結(jié)大全(推薦)
這篇文章主要給大家介紹了關(guān)于iOS中顏色設(shè)置的相關(guān)資料,其中包括導(dǎo)航欄、狀態(tài)欄、Tabbar、Button、TextField、AttributedString和通用部分的顏色設(shè)置方法示例,對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起看看吧。2017-09-09iOS中關(guān)于音樂鎖屏控制音樂(鎖屏信息設(shè)置)的實(shí)例代碼
這篇文章主要介紹了 iOS中關(guān)于音樂鎖屏控制音樂(鎖屏信息設(shè)置)的實(shí)例代碼,需要的朋友可以參考下2017-01-01iOS中使用URL Scheme進(jìn)行App跳轉(zhuǎn)的教程
這篇文章主要介紹了iOS中使用URL Scheme進(jìn)行App跳轉(zhuǎn)的教程,比如在應(yīng)用內(nèi)提示安裝另一個應(yīng)用時就以url打開safari然后打開app store那樣,需要的朋友可以參考下2016-04-04IOS 遠(yuǎn)程通知兼容(IOS7,IOS8)實(shí)例詳解
這篇文章主要介紹了IOS 遠(yuǎn)程通知兼容(IOS7,IOS8)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03淺析iOS中的淺拷貝和深拷貝(copy和mutableCopy)
ios提供了copy和mutablecopy方法,顧名思義,copy就是復(fù)制了一個imutable的對象,而mutablecopy就是復(fù)制了一個mutable的對象。本文給大家介紹iOS中的淺拷貝和深拷貝(copy和mutableCopy) ,感興趣的朋友一起看看吧2016-04-04iOS App的設(shè)計(jì)模式開發(fā)中對State狀態(tài)模式的運(yùn)用
這篇文章主要介紹了iOS App的設(shè)計(jì)模式開發(fā)中對State狀態(tài)模式的運(yùn)用,示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-03-03針對iOS開發(fā)的一些Xcode使用技巧小結(jié)
這篇文章主要介紹了針對iOS開發(fā)的一些Xcode使用技巧小結(jié),Xcode是Mac上編寫iOS應(yīng)用的開發(fā)環(huán)境,需要的朋友可以參考下2015-12-12