iOS手勢識(shí)別

UIGestureRecognizer手勢識(shí)別器
手勢識(shí)別器是特殊的觸摸事件
UIGestureRecognizer是一個(gè)抽象的父類,我們一般不使用這個(gè)類,而是使用它的子類
tap(輕拍),rotation(旋轉(zhuǎn)),swipe(輕掃),pinch(捏合),pan(平移),longPress(長按),screenEdgePan(屏幕邊界平移)

--- tap手勢 ---

 // 1.創(chuàng)建手勢并且初始化,使用initWithTarget:action: 方法創(chuàng)建 
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapView:)];       
// 2.設(shè)置屬性   
 // 1) 輕拍次數(shù) (默認(rèn)是1)    
tap.numberOfTapsRequired = 2;    
// 2) 手指個(gè)數(shù)    
tap.numberOfTouchesRequired = 2; 
// 3.添加到視圖上 addGestureRecognizer: 方法
   [_redView addGestureRecognizer:tap];
// 調(diào)用的方法
- (void)tapView:(UITapGestureRecognizer *)sender{
    _redView.backgroundColor = [UIColor randomColor];
}

--- swipe 清掃手勢 ---

 UISwipeGestureRecognizer * swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeView:)];    
// 設(shè)置輕掃方向 (枚舉)
   swipe.direction = UISwipeGestureRecognizerDirectionDown;
  [_redView addGestureRecognizer:swipe];
// 調(diào)用的方法
- (void)swipeView:(UISwipeGestureRecognizer *)sender{
    _redView.backgroundColor = [UIColor randomColor];
}

--- longPress 長按 ---

 UILongPressGestureRecognizer * longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressView:)];    
// 最小長按時(shí)間
    longPress.minimumPressDuration = 2;
  [_redView addGestureRecognizer:longPress];
// 調(diào)用的方法
 - (void)longPressView:(UILongPressGestureRecognizer *)sender{   
 // 判斷手勢狀態(tài) (如果不判斷會(huì)彈出2次窗)   
    if (sender.state == UIGestureRecognizerStateBegan) {
        NSLog(@"長按狀態(tài)");
    }
}  

--- pan 平移手勢 ---

 UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panView:)];
 [_redView addGestureRecognizer:pan];
// 調(diào)用的方法
- (void)panView:(UIPanGestureRecognizer *)sender{    
// 方法1    
// 計(jì)算偏移量   
 CGPoint point = [sender translationInView:_redView];   
// 平移  x1 = ax + cy + tx; y1 = bx + dy + ty;
//    sender.view.transform = CGAffineTransformMake(1, 0, 0, 1, point.x, point.y);    
// 方法2    
// 每次移動(dòng)都是從原來的位置移動(dòng) 一般都有make
//    sender.view.transform = CGAffineTransformMakeTranslation(point.x, point.y);    
// 方法3   
 // 以上次的位置為標(biāo)準(zhǔn) 因?yàn)榘焉洗蔚膖ransform傳進(jìn)來了 所以要重置增量   
 sender.view.transform = CGAffineTransformTranslate(sender.view.transform, point.x, point.y);    
// 增量置為0   
 [sender setTranslation:CGPointZero inView:sender.view];
}

--- pinch 捏合 ---

 UIPinchGestureRecognizer * pinch = [[UIPinchGestureRecognizer  alloc] initWithTarget:self action:@selector(pinchView:)];    
// 添加手勢
[_redView addGestureRecognizer:pinch];

// 調(diào)用的方法
- (void)pinchView:(UIPinchGestureRecognizer *)sender{    
// 方法1    
// x1 = ax + cy + tx; y1 = bx + dy + ty; 放大只和ax dy有關(guān)系    
// scale 是縮放比例
// sender.view.transform = CGAffineTransformMake(sender.scale, 0, 0, sender.scale, 0, 0);      
 // 方法2   
 // 每次縮放以原來為標(biāo)準(zhǔn)
// sender.view.transform = CGAffineTransformMakeScale(sender.scale, sender.scale);       
// 方法3   
 // 以上次的為標(biāo)準(zhǔn)    
sender.view.transform = CGAffineTransformScale(sender.view.transform, sender.scale, sender.scale);   
 // 重新設(shè)置縮放比例 (1是正常縮放, <1是縮小, >1是放大) 
   sender.scale = 1;
}  

---rotation 旋轉(zhuǎn)手勢 ---

 UIRotationGestureRecognizer * rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationView:)];
 [_redView addGestureRecognizer:rotation];

// 調(diào)用的方法
- (void)rotationView:(UIRotationGestureRecognizer *)sender{   
 // 方法1
//  sender.view.transform = CGAffineTransformMake(cos(M_PI_4), sin(M_PI_4), -sin(M_PI_4), cos(M_PI_4), 0, 0);       
// 方法2   
 // rotation 是旋轉(zhuǎn)角度    
// 一個(gè)參數(shù),以原來的位置為標(biāo)準(zhǔn)
//sender.view.transform = CGAffineTransformMakeRotation(sender.rotation);       
// 方法3    
// 兩個(gè)參數(shù) 以上次位置為標(biāo)準(zhǔn)    
sender.view.transform = CGAffineTransformRotate(sender.view.transform, sender.rotation);    // 清除增量    
sender.rotation = 0.0;
}

--- screenEdgePan 屏幕邊界平移 ---

 UIScreenEdgePanGestureRecognizer *edgePan = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(edgePanView:)];    
// 屬性設(shè)置    
// 注意:使用屏幕邊緣平移需要注意兩點(diǎn)    
// 1. 視圖的位置(屏幕邊緣)    
// 2. 設(shè)置edges屬性 (枚舉)   
 edgePan.edges = UIRectEdgeLeft;    
// 添加手勢
[_redView addGestureRecognizer:edgePan];

// 調(diào)用的方法
- (void)edgePanView:(UIScreenEdgePanGestureRecognizer *)sender{    
// 計(jì)算偏移量   
 CGPoint point = [sender translationInView:_redView];    
// 進(jìn)行平移    
sender.view.transform = CGAffineTransformMakeTranslation(point.x, point.y);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末枝誊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子惜纸,更是在濱河造成了極大的恐慌叶撒,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耐版,死亡現(xiàn)場離奇詭異祠够,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)粪牲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門古瓤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腺阳,你說我怎么就攤上這事落君。” “怎么了亭引?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵绎速,是天一觀的道長。 經(jīng)常有香客問我痛侍,道長朝氓,這世上最難降的妖魔是什么魔市? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮赵哲,結(jié)果婚禮上待德,老公的妹妹穿的比我還像新娘。我一直安慰自己枫夺,他們只是感情好将宪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著橡庞,像睡著了一般较坛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扒最,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天丑勤,我揣著相機(jī)與錄音,去河邊找鬼吧趣。 笑死法竞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的强挫。 我是一名探鬼主播岔霸,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼俯渤!你這毒婦竟也來了呆细?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤八匠,失蹤者是張志新(化名)和其女友劉穎絮爷,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梨树,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡略水,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了劝萤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慎璧。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖厌处,靈堂內(nèi)的尸體忽然破棺而出岁疼,到底是詐尸還是另有隱情缆娃,我是刑警寧澤瑰排,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站崇渗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宅广。R本人自食惡果不足惜些举,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驶臊。 院中可真熱鬧绪抛,春花似錦、人聲如沸幢码。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贞铣。三九已至,卻和暖如春辕坝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背琳袄。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工窖逗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人餐蔬。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓佑附,卻偏偏與公主長得像仗考,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子痴鳄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容