<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    iOS開發之手勢識別

     感覺有必要把iOS開發中的手勢識別做一個小小的總結。在上一篇iOS開發之自定義表情鍵盤(組件封裝與自動布局)博客中用到了一個輕擊手勢,就是在輕擊TextView時從表情鍵盤回到系統鍵盤,在TextView中的手是用storyboard添加的。下面會先給出如何用storyboard給相應的控件添加手勢,然后在用純代碼的方式給我們的控件添加手勢,手勢的用法比較簡單。和button的用法類似,也是目標動作回調,話不多說,切入今天的正題。總共有六種手勢識別:輕擊手勢(TapGestureRecognizer),輕掃手勢(SwipeGestureRecognizer), 長按手勢(LongPressGestureRecognizer),  拖動手勢(PanGestureRecognizer), 捏合手勢(PinchGestureRecognizer),旋轉手勢(RotationGestureRecognizer);
      其實這些手勢用touche事件完全可以實現,蘋果就是把常用的觸摸事件封裝成手勢,來提供給用戶。讀者完全可以用TouchesMoved來寫拖動手勢等
      一,用storyboard給控件添加手勢識別,當然啦用storyboard得截張圖啦
      1.用storyboard添加手勢識別,和添加一個Button的步驟一樣,首先我們得找到相應的手勢,把手勢識別的控件拖到我們要添加手勢的控件中,截圖如下:
      2.給我們拖出的手勢添加回調事件,和給Button回調事件沒啥區別的,在回調方法中添加要實現的業務邏輯即可,截圖如下:
      二,純代碼添加手勢識別
      用storyboard可以大大簡化我們的操作,不過純代碼的方式還是要會的,就像要Dreamwear編輯網頁一樣(當然啦,storyboard的拖拽功能要比Dreamwear的拖拽強大的多),用純代碼敲出來的更為靈活,更加便于維護。不過用storyboard可以減少我們的工作量,這兩個要配合著使用才能大大的提高我們的開發效率。個人感覺用storyboard把框架搭起來(Controller間的關系),一下小的東西還是用純代碼敲出來更好一些。下面就給出如何給我們的控件用純代碼的方式來添加手勢識別。
      1.輕擊手勢(TapGestureRecognizer)的添加
      初始化代碼TapGestureRecongnizer的代碼如下:
      1     //新建tap手勢
      2     UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGesture:)];
      3     //設置點擊次數和點擊手指數
      4     tapGesture.numberOfTapsRequired = 1; //點擊次數
      5     tapGesture.numberOfTouchesRequired = 1; //點擊手指數
      6     [self.view addGestureRecognizer:tapGesture];
      在回調方法中添加相應的業務邏輯:
      1 //輕擊手勢觸發方法
      2 -(void)tapGesture:(id)sender
      3 {
      4     //輕擊后要做的事情
      5 }
      2.長按手勢(LongPressGestureRecognizer)
      初始化代碼:
      1     //添加長摁手勢
      2     UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGesture:)];
      3     //設置長按時間
      4     longPressGesture.minimumPressDuration = 0.5; //(2秒)
      5     [self.view addGestureRecognizer:longPressGesture];
      在對應的回調方法中添加相應的方法(當手勢開始時執行):
      1 //常摁手勢觸發方法
      2 -(void)longPressGesture:(id)sender
      3 {
      4     UILongPressGestureRecognizer *longPress = sender;
      5     if (longPress.state == UIGestureRecognizerStateBegan)
      6     {
      7         UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"長按觸發" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles: nil];
      8         [alter show];
      9     }
      10 }
     代碼說明:手勢的常用狀態如下
      開始:UIGestureRecognizerStateBegan
      改變:UIGestureRecognizerStateChanged
      結束:UIGestureRecognizerStateEnded
      取消:UIGestureRecognizerStateCancelled
      失敗:UIGestureRecognizerStateFailed
      3.輕掃手勢(SwipeGestureRecognizer)
      在初始化輕掃手勢的時候得指定輕掃的方向,上下左右。 如果要要添加多個輕掃方向,就得添加多個輕掃手勢,不過回調的是同一個方法。
      添加輕掃手勢,一個向左一個向右,代碼如下:
      1     //添加輕掃手勢
      2     UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)];
      3     //設置輕掃的方向
      4     swipeGesture.direction = UISwipeGestureRecognizerDirectionRight; //默認向右
      5     [self.view addGestureRecognizer:swipeGesture];
      6
      7     //添加輕掃手勢
      8     UISwipeGestureRecognizer *swipeGestureLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)];
      9     //設置輕掃的方向
      10     swipeGestureLeft.direction = UISwipeGestureRecognizerDirectionLeft; //默認向右
      11     [self.view addGestureRecognizer:swipeGestureLeft];
      回調方法如下:
    1 //輕掃手勢觸發方法
    2 -(void)swipeGesture:(id)sender
    3 {
    4     UISwipeGestureRecognizer *swipe = sender;
    5     if (swipe.direction == UISwipeGestureRecognizerDirectionLeft)
    6     {
    7         //向左輕掃做的事情
    8     }
    9     if (swipe.direction == UISwipeGestureRecognizerDirectionRight)
    10     {
    11         //向右輕掃做的事情
    12     }
    13 }
    14
      4.捏合手勢(PinchGestureRecognizer)
      捏合手勢初始化
      1     //添加捏合手勢
      2     UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGesture:)];
      3     [self.view addGestureRecognizer:pinchGesture];
      捏合手勢要觸發的方法(放大或者縮小圖片):
    1 ////捏合手勢觸發方法
    2 -(void) pinchGesture:(id)sender
    3 {
    4      UIPinchGestureRecognizer *gesture = sender;
    5
    6     //手勢改變時
    7     if (gesture.state == UIGestureRecognizerStateChanged)
    8     {
    9         //捏合手勢中scale屬性記錄的縮放比例
    10         _imageView.transform = CGAffineTransformMakeScale(gesture.scale, gesture.scale);
    11     }
    12
    13     //結束后恢復
    14     if(gesture.state==UIGestureRecognizerStateEnded)
    15     {
    16         [UIView animateWithDuration:0.5 animations:^{
    17             _imageView.transform = CGAffineTransformIdentity;//取消一切形變
    18         }];
    19     }
    20 }
      5.拖動手勢(PanGestureRecognizer)
      拖動手勢的初始化
      1     //添加拖動手勢
      2     UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGesture:)];
      3     [self.view addGestureRecognizer:panGesture];
      拖動手勢要做的方法(通過translationInView獲取移動的點,和TouchesMoved方法類似)
      1 //拖動手勢
      2 -(void) panGesture:(id)sender
      3 {
      4     UIPanGestureRecognizer *panGesture = sender;
      5
      6     CGPoint movePoint = [panGesture translationInView:self.view];
      7
      8     //做你想做的事兒
      9 }
     6.旋轉手勢(RotationGestureRecognizer)
      旋轉手勢的初始化
      1     //添加旋轉手勢
      2     UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationGesture:)];
      3     [self.view addGestureRecognizer:rotationGesture];
      旋轉手勢調用的方法:
    1 //旋轉手勢
    2 -(void)rotationGesture:(id)sender
    3 {
    4
    5     UIRotationGestureRecognizer *gesture = sender;
    6
    7     if (gesture.state==UIGestureRecognizerStateChanged)
    8     {
    9         _imageView.transform=CGAffineTransformMakeRotation(gesture.rotation);
    10     }
    11
    12     if(gesture.state==UIGestureRecognizerStateEnded)
    13     {
    14
    15         [UIView animateWithDuration:1 animations:^{
    16             _imageView.transform=CGAffineTransformIdentity;//取消形變
    17         }];
    18     }
    19
    20 }
      上面的東西沒有多高深的技術,就是對iOS開發中的手勢做了一下小小的總結,溫故一下基礎知識。

    posted on 2014-11-19 10:03 順其自然EVO 閱讀(242) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

    <2014年11月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    30123456

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费看黄网站在线看| 免费福利在线观看| 6080午夜一级毛片免费看| 亚洲av午夜福利精品一区| 韩日电影在线播放免费版| 亚洲免费日韩无码系列| 永久免费观看黄网站| 亚洲女人被黑人巨大进入| 国产特黄一级一片免费 | 久久精品国产亚洲av麻豆色欲| 免费黄色电影在线观看| 亚洲经典在线观看| 免费无码AV电影在线观看| 久久无码av亚洲精品色午夜| 成人在线视频免费| 国产亚洲精品成人久久网站| 亚洲国产成人精品无码久久久久久综合| 久青草国产免费观看| 国产亚洲一区二区精品| 亚洲一区二区三区免费视频| 亚洲成a人片在线不卡| 国产猛烈高潮尖叫视频免费| 国产精品福利片免费看| 亚洲午夜未满十八勿入| 成年女人免费v片| 一区二区三区在线观看免费| 亚洲AV美女一区二区三区| 无码日韩人妻av一区免费| 男女超爽视频免费播放| 亚洲成AV人片在线观看WWW| 国内精品免费麻豆网站91麻豆| 亚洲av日韩av永久无码电影| 国产亚洲日韩一区二区三区| 亚洲视频免费在线播放| 国产精品亚洲一区二区无码| 91麻豆国产自产在线观看亚洲| 国产91免费在线观看| 天堂亚洲免费视频| 亚洲日本在线免费观看| 亚洲 小说区 图片区 都市| 91老湿机福利免费体验|