IOS各種手勢操作執行個體,IOS手勢操作執行個體

來源:互聯網
上載者:User

IOS各種手勢操作執行個體,IOS手勢操作執行個體
先看下效果

手勢相關的介紹

IOS中手勢操作一般是 UIGestureRecognizer 類的幾個手勢子類去實現,一般我們用到的手勢就這麼5種:

1、點擊  UITapGestureRecognizer

2、平移  UIPanGestureRecognizer

3、縮放  UIPinchGestureRecognizer

4、旋轉  UIRotationGestureRecognizer

5、輕掃  UISwipeGestureRecognizer

我們上面這個執行個體中就用到了上面這5種手勢,不過其中 點擊與輕掃沒有體現出來,只是輸出了下日誌而已,一會看代碼

下面我們來分別介紹下這幾種手勢

1、UITapGestureRecognizer 點選手勢
UITapGestureRecognizer* tapGes = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGes:)];// 點擊次數,預設為1,1為單擊,2為雙擊tapGes.numberOfTapsRequired = 2;

這個點選手勢類有一個屬性 numberOfTapsRequired 用於設定點擊數,就是點擊幾次才觸發這個事件

2、UIPanGestureRecognizer 平移手勢
// 平移手勢- (void)initPanGes{        UIPanGestureRecognizer* panGes = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGes:)];        [self.imgView addGestureRecognizer:panGes];}- (void)panGes:(UIPanGestureRecognizer*)ges{        // 擷取平移的座標點    CGPoint transPoint =  [ges translationInView:self.imgView];}

平移手勢本身沒太多可設定的屬性,在平移事件觸發手,可以用  translationInView 方法擷取當前平移座標點

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 屬性,表示當前縮放值

4、UIRotationGestureRecognizer 旋轉手勢
// 旋轉手勢- (void)initRotation{        UIRotationGestureRecognizer* rotationGes = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGes:)];    [self.imgView addGestureRecognizer:rotationGes];}- (void)rotationGes:(UIRotationGestureRecognizer*)ges{        // 旋轉圖片    self.imgView.transform = CGAffineTransformRotate(self.imgView.transform, ges.rotation);}

旋轉手勢在事件裡面可以通過擷取 rotation 屬性擷取當前旋轉的角度

5、UISwipeGestureRecognizer 撥動手勢
// 撥動手勢- (void)initSwipeGes{        // 建立 從右向左 輕掃的手勢    UISwipeGestureRecognizer* swipeLeftGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)];    // 方向,預設是從左往右    // 最多隻能開啟一個手勢,如果要開啟多個就得建立多個手勢    // 監聽從右向左的方向    swipeLeftGes.direction = UISwipeGestureRecognizerDirectionLeft;    [self.imgView addGestureRecognizer:swipeLeftGes];}- (void)swipeGes:(UISwipeGestureRecognizer*)ges{        // ges.direction方向值    NSLog(@"%s diection:%lu",__func__,(unsigned long)ges.direction);}

撥動手勢對象需要設定 direction 屬性,預設是只監聽從左向右,這是一個枚舉值 UISwipeGestureRecognizerDirection

UISwipeGestureRecognizerDirectionRight  從左向右(預設值)

UISwipeGestureRecognizerDirectionLeft    從右向左

UISwipeGestureRecognizerDirectionUp    從下向上

UISwipeGestureRecognizerDirectionDown  從上向下

 

下面看一下我們上面那個實現代碼吧

////  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];}// 點選手勢- (void)initTapGes{        UITapGestureRecognizer* tapGes = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGes:)];    // 點擊次數,預設為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{        // 擷取平移的座標點    CGPoint transPoint =  [ges translationInView:self.imgView];        // 在之前的基礎上移動圖片    self.imgView.transform = CGAffineTransformTranslate(self.imgView.transform, transPoint.x, transPoint.y);        // 複原,必需複原    // 每次都清空一下消除座標疊加    [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);        // 複原    // 每次都清空一下消除疊加    ges.scale = 1;}// 旋轉手勢- (void)initRotation{        UIRotationGestureRecognizer* rotationGes = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGes:)];    rotationGes.delegate = self;        [self.imgView addGestureRecognizer:rotationGes];}- (void)rotationGes:(UIRotationGestureRecognizer*)ges{        // 旋轉圖片    self.imgView.transform = CGAffineTransformRotate(self.imgView.transform, ges.rotation);        // 複原    // 每次都清空一下消除疊加    ges.rotation = 0;        NSLog(@"%s",__func__);}// 撥動手勢- (void)initSwipeGes{        // 建立 從右向左 輕掃的手勢    UISwipeGestureRecognizer* swipeLeftGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)];    // 方向,預設是從左往右    // 最多隻能開啟一個手勢,如果要開啟多個就得建立多個手勢    // 監聽從右向左的方向    swipeLeftGes.direction = UISwipeGestureRecognizerDirectionLeft;    swipeLeftGes.delegate = self;        [self.imgView addGestureRecognizer:swipeLeftGes];            // 建立 從下向上 輕掃的手勢    UISwipeGestureRecognizer* swipeUpGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)];    // 監聽從下向上的方向    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// 判斷是否能觸發手勢- (BOOL)gestureRecognizerShouldBegin:(UITapGestureRecognizer *)gestureRecognizer{        return YES;}// 是否允許多手勢操作,不是多觸摸點- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{        return YES;}@end

 

這裡需要注意的有兩點:

1、對於 平移、縮放、旋轉 這3個手勢,我們如果要用它的值去處理的話,要記得複原!複原!複原!這點很重要!重要的事說3遍~~

  平移手勢裡面我們需要設定 setTranslation:CGPointZero 來複原它的座標值,不然下一次事件觸發這個座標值會疊加
  縮放手勢裡面設定 ges.scale = 1 來複原它的縮放值
  旋轉手勢裡面設定 ges.rotation = 0 來複原它的角度值

2、假如我們需要多手勢一起用的時候就需要設定下delegate 裡面的一個返回參數的方法了

  

// 是否允許多手勢操作,不是多觸摸點- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{        return YES;}

這次分享就到這裡~~有什麼不清楚的,就留言吧 ^_^

 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.