<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 閱讀(245) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

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

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲乱亚洲乱妇无码麻豆| 亚洲AV无码成人专区片在线观看| 老司机在线免费视频| 成人免费无毒在线观看网站| 亚洲成aⅴ人片久青草影院| 亚洲狠狠婷婷综合久久久久 | 亚洲一区二区高清| 亚洲国产精品无码专区| 亚洲AV成人无码久久WWW| 怡红院免费全部视频在线视频| 16女性下面无遮挡免费| 免费又黄又爽的视频| 亚洲一级毛片在线播放| 未满十八私人高清免费影院| 日本zzzzwww大片免费| 国产V亚洲V天堂无码久久久| 最近免费中文字幕中文高清 | 69成人免费视频无码专区| 亚洲AV无码国产精品麻豆天美| 蜜桃成人无码区免费视频网站 | 国产国拍精品亚洲AV片| jzzijzzij在线观看亚洲熟妇| 亚洲最大免费视频网| 亚洲无mate20pro麻豆| 久久午夜伦鲁片免费无码| 亚洲午夜在线一区| 久久精品人成免费| 亚洲国产成人片在线观看| 最近新韩国日本免费观看| 亚洲综合激情五月色一区| 精品无码无人网站免费视频 | 亚洲第一页在线观看| 在线免费观看h片| 亚洲制服中文字幕第一区| 国产人成网在线播放VA免费| 久久综合亚洲色HEZYO社区| 免费国产a理论片| 精品无码国产污污污免费| 亚洲一区二区三区亚瑟 | 亚洲女初尝黑人巨高清| 日韩版码免费福利视频|