Gesture手勢

手勢識別器

手勢識別器是對觸摸事件做了封裝,我們無需自己去判斷某個手勢是否觸發(fā)子眶,手勢識別器本身起到了識別作用之碗,我們把重心放在識別之后要做什么操作上面。手勢識別器是iOS中比較抽象的一個類失晴,用于識別一個手勢。
手勢識別器有7個子類:輕拍手勢拘央、平移手勢涂屁、輕掃手勢、縮放手勢堪滨、旋轉(zhuǎn)手勢胯陋、長按手勢以及屏幕邊界平移手勢。一旦指定的手勢被識別袱箱,我們可以執(zhí)行我們自己定義好的操作遏乔。

UIView *gestureView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
gestureView.center = self.window.center;//將當前視圖放置在window中間
gestureView.backgroundColor = [UIColor grayColor];//設置背景色
[self.window addSubview:gestureView];//添加到window上```

##UITapGestureRecognizer
輕拍手勢識別器,能識別輕拍操作
```//輕拍手勢
UITapGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
//給創(chuàng)建好的視圖添加手勢
[gestureView addGestureRecognizer:tapGR];
[tapGR setNumberOfTapsRequired:2];//設置輕怕次數(shù)
tapGR.numberOfTouchesRequired = 1;//設置輕怕次數(shù)```
```//輕掃手勢的回調(diào)方法
- (void)swipeAction: (UISwipeGestureRecognizer *)sender
{
    NSLog(@"123");
    //創(chuàng)建一個警示框
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示框" message:@"內(nèi)容" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil];
    [alertView show];//展示警示框
    
}```

##UILongPressGestureRecognizer
長按手勢識別器发笔,能識別長按操作盟萨。
```//長按手勢
UILongPressGestureRecognizer *longPGR = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longAction:)];
[gestureView addGestureRecognizer:longPGR];```
```//長按手勢的回調(diào)方法
- (void)longAction: (UILongPressGestureRecognizer *)sender
{
    //直接聲明,長按手勢的回調(diào)方法會執(zhí)行兩次了讨,因為長按狀態(tài)下有開始和結(jié)束兩種狀態(tài)捻激,如果不加判斷,系統(tǒng)會認為結(jié)束也就是另一個長按的開始前计,所以加一句在長按結(jié)束時再執(zhí)行胞谭,開始時不執(zhí)行
    if (sender.state == UIGestureRecognizerStateEnded) {
        NSLog(@"000");
    }
    else if (sender.state == UIGestureRecognizerStateBegan)
    {
        NSLog(@"123");
    }
}```

##UIPinchGestureRecognizer
捏合手勢識別器,能識別捏合操作男杈。
```//捏合手勢
UIPinchGestureRecognizer *pinchGR = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchAction:)];
[gestureView addGestureRecognizer:pinchGR];```
```//捏合手勢的回調(diào)方法
- (void)pinchAction: (UIPinchGestureRecognizer *)sender
{
    //通過捏合手勢得到縮放比率
    float scale = sender.scale;
    //得到該手勢得到的視圖
    UIView *view = sender.view;
    //2D仿射變換函數(shù)的縮放函數(shù)來實現(xiàn)視圖的放大縮小
    //是在原有基礎上來改變當前的視圖
    /**
     *  @param t#>  <#t#> description#> 現(xiàn)有的視圖的transform
     *  @param sx#> <#sx#> description#> x軸上的縮放比率
     *  @param sy#> <#sy#> description#> y軸上的縮放比率
     *
     */
    view.transform = CGAffineTransformScale(view.transform, scale, scale);
    //是在視圖最初的tramsfrom狀態(tài)上改變丈屹,不管執(zhí)行多少次,都是以該視圖最初的transform狀態(tài)為基礎來改變
    //每次捏合動作完畢之后伶棒,讓此次捏合值復原旺垒,使得它每次捏合都是從1倍開始
    sender.scale = 1;
}```

##UIRotationGestureRecognizer
旋轉(zhuǎn)手勢識別器,能識別旋轉(zhuǎn)操作肤无。
```//旋轉(zhuǎn)手勢
UIRotationGestureRecognizer *rotationGR = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationAction:)];
[gestureView addGestureRecognizer:rotationGR];
- (void)rotationAction: (UIRotationGestureRecognizer *)sender
{
    //通過手勢得到旋轉(zhuǎn)角度
    float rota = sender.rotation;
    //得到該手勢作用的視圖
    UIView *view = sender.view;
    //通過2D仿射變換函數(shù)中的旋轉(zhuǎn)函數(shù)來使得當前視圖旋轉(zhuǎn)
    view.transform = CGAffineTransformRotate(view.transform, rota);
    //復原
    sender.rotation = 0; 
}```

##UIPanGestureRecognizer
平移手勢識別器先蒋,能識別拖拽操作。
```//平移手勢
UIPanGestureRecognizer *panGP =[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];
[gestureView addGestureRecognizer:panGP];```
```//平移手勢的回調(diào)方法
- (void)panAction: (UIPanGestureRecognizer *)sender
{
    //得到手勢當前所在視圖
    UIImageView *imageView = (UIImageView *)sender.view;
    //得到手勢在視圖上移動的偏移量
    CGPoint late = [sender translationInView:imageView.superview];
    //通過2D方式變換函數(shù)中的平移函數(shù)使得當前函數(shù)平移
    imageView.transform = CGAffineTransformTranslate(imageView.transform, late.x, late.y);
    [sender setTranslation:CGPointZero inView:imageView.superview];   
}```


##UISwipeGestureRecognizer
輕掃手勢識別器宛渐,能識別拖拽操作竞漾。
```//輕掃手勢
UISwipeGestureRecognizer *swipeGR = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeAction:)];
//設置輕掃的方向,默認值是從左往右窥翩,最多同時支持(左右)或者(上下)
swipeGR.direction = UISwipeGestureRecognizerDirectionDown | UISwipeGestureRecognizerDirectionUp;
[gestureView addGestureRecognizer:swipeGR];```
```//輕掃手勢的回調(diào)方法
- (void)swipeAction: (UISwipeGestureRecognizer *)sender
{
    NSLog(@"實現(xiàn)了輕掃手勢");
}```

##UIScreenEdgePanGestureRecognizer
屏幕邊緣輕掃識別器畴蹭,是iOS7中新增的手勢。
```//邊緣輕掃手勢
UIScreenEdgePanGestureRecognizer *screenEdgePanGr = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(edgeAction:)];
screenEdgePanGr.edges = UIRectEdgeAll;
[gestureView addGestureRecognizer:screenEdgePanGr];```
```- (void)edgeAction: (UIScreenEdgePanGestureRecognizer *)sender
{
    NSLog(@"成功觸發(fā)了屏幕邊緣手勢");
}```

#使得多個手勢可以同時響應的代理方法(必須對手勢指定代理)
```- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    //返回值為yes的時候鳍烁,當執(zhí)行一個手勢的操作的時候叨襟,也可以執(zhí)行其它手勢的操作
    return YES;
}```


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市幔荒,隨后出現(xiàn)的幾起案子糊闽,更是在濱河造成了極大的恐慌梳玫,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件右犹,死亡現(xiàn)場離奇詭異提澎,居然都是意外死亡,警方通過查閱死者的電腦和手機念链,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門盼忌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掂墓,你說我怎么就攤上這事谦纱。” “怎么了君编?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵跨嘉,是天一觀的道長。 經(jīng)常有香客問我吃嘿,道長祠乃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任兑燥,我火速辦了婚禮亮瓷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘降瞳。我一直安慰自己嘱支,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布力崇。 她就那樣靜靜地躺著斗塘,像睡著了一般赢织。 火紅的嫁衣襯著肌膚如雪亮靴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天于置,我揣著相機與錄音茧吊,去河邊找鬼。 笑死八毯,一個胖子當著我的面吹牛搓侄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播话速,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼讶踪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了泊交?” 一聲冷哼從身側(cè)響起乳讥,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤柱查,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后云石,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唉工,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年汹忠,在試婚紗的時候發(fā)現(xiàn)自己被綠了淋硝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡宽菜,死狀恐怖谣膳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赋焕,我是刑警寧澤参歹,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站隆判,受9級特大地震影響犬庇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜侨嘀,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一臭挽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咬腕,春花似錦欢峰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至举反,卻和暖如春懊直,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背火鼻。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工室囊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人魁索。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓融撞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親粗蔚。 傳聞我的和親對象是個殘疾皇子尝偎,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

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