国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

IOS中各種手勢操作實例代碼

2020-07-26 02:52:39
字體:
供稿:網(wǎng)友

先看下效果

手勢相關(guān)的介紹

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

1、點擊  UITapGestureRecognizer

2、平移  UIPanGestureRecognizer

3、縮放  UIPinchGestureRecognizer

4、旋轉(zhuǎn)  UIRotationGestureRecognizer

5、輕掃  UISwipeGestureRecognizer

我們上面這個實例中就用到了上面這5種手勢,不過其中 點擊與輕掃沒有體現(xiàn)出來,只是輸出了下日志而已,一會看代碼

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

1、UITapGestureRecognizer 點擊手勢

UITapGestureRecognizer* tapGes = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGes:)];// 點擊次數(shù),默認(rèn)為1,1為單擊,2為雙擊tapGes.numberOfTapsRequired = 2;

這個點擊手勢類有一個屬性 numberOfTapsRequired 用于設(shè)置點擊數(shù),就是點擊幾次才觸發(fā)這個事件

2、UIPanGestureRecognizer 平移手勢

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

平移手勢本身沒太多可設(shè)置的屬性,在平移事件觸發(fā)手,可以用  translationInView 方法獲取當(dāng)前平移坐標(biāo)點

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 屬性,表示當(dāng)前縮放值

4、UIRotationGestureRecognizer 旋轉(zhuǎn)手勢

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

旋轉(zhuǎn)手勢在事件里面可以通過獲取 rotation 屬性獲取當(dāng)前旋轉(zhuǎn)的角度

5、UISwipeGestureRecognizer 輕掃手勢

// 輕掃手勢- (void)initSwipeGes{ // 創(chuàng)建 從右向左 輕掃的手勢 UISwipeGestureRecognizer* swipeLeftGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)]; // 方向,默認(rèn)是從左往右 // 最多只能開啟一個手勢,如果要開啟多個就得創(chuàng)建多個手勢 // 監(jiān)聽從右向左的方向 swipeLeftGes.direction = UISwipeGestureRecognizerDirectionLeft; [self.imgView addGestureRecognizer:swipeLeftGes];}- (void)swipeGes:(UISwipeGestureRecognizer*)ges{ // ges.direction方向值 NSLog(@"%s diection:%lu",__func__,(unsigned long)ges.direction);}

輕掃手勢對象需要設(shè)置 direction 屬性,默認(rèn)是只監(jiān)聽從左向右,這是一個枚舉值 UISwipeGestureRecognizerDirection

UISwipeGestureRecognizerDirectionRight  從左向右(默認(rèn)值)UISwipeGestureRecognizerDirectionLeft   從右向左UISwipeGestureRecognizerDirectionUp    從下向上UISwipeGestureRecognizerDirectionDown  從上向下

下面看一下我們上面那個效果圖實現(xiàn)代碼吧

//// 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:)]; // 點擊次數(shù),默認(rèn)為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{ // 獲取平移的坐標(biāo)點 CGPoint transPoint = [ges translationInView:self.imgView]; // 在之前的基礎(chǔ)上移動圖片 self.imgView.transform = CGAffineTransformTranslate(self.imgView.transform, transPoint.x, transPoint.y); // 復(fù)原,必需復(fù)原 // 每次都清空一下消除坐標(biāo)疊加 [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); // 復(fù)原 // 每次都清空一下消除疊加 ges.scale = 1;}// 旋轉(zhuǎn)手勢- (void)initRotation{ UIRotationGestureRecognizer* rotationGes = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGes:)]; rotationGes.delegate = self; [self.imgView addGestureRecognizer:rotationGes];}- (void)rotationGes:(UIRotationGestureRecognizer*)ges{ // 旋轉(zhuǎn)圖片 self.imgView.transform = CGAffineTransformRotate(self.imgView.transform, ges.rotation); // 復(fù)原 // 每次都清空一下消除疊加 ges.rotation = 0; NSLog(@"%s",__func__);}// 輕掃手勢- (void)initSwipeGes{ // 創(chuàng)建 從右向左 輕掃的手勢 UISwipeGestureRecognizer* swipeLeftGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)]; // 方向,默認(rèn)是從左往右 // 最多只能開啟一個手勢,如果要開啟多個就得創(chuàng)建多個手勢 // 監(jiān)聽從右向左的方向 swipeLeftGes.direction = UISwipeGestureRecognizerDirectionLeft; swipeLeftGes.delegate = self; [self.imgView addGestureRecognizer:swipeLeftGes]; // 創(chuàng)建 從下向上 輕掃的手勢 UISwipeGestureRecognizer* swipeUpGes = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGes:)]; // 監(jiān)聽從下向上的方向 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// 判斷是否能觸發(fā)手勢- (BOOL)gestureRecognizerShouldBegin:(UITapGestureRecognizer *)gestureRecognizer{ return YES;}// 是否允許多手勢操作,不是多觸摸點- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ return YES;}@end

這里需要注意的有兩點:

1、對于 平移、縮放、旋轉(zhuǎn) 這3個手勢,我們?nèi)绻盟闹等ヌ幚淼脑挘浀脧?fù)原!復(fù)原!復(fù)原!這點很重要!重要的事說3遍~~

  平移手勢里面我們需要設(shè)置 setTranslation:CGPointZero 來復(fù)原它的坐標(biāo)值,不然下一次事件觸發(fā)這個坐標(biāo)值會疊加
  縮放手勢里面設(shè)置 ges.scale = 1 來復(fù)原它的縮放值
  旋轉(zhuǎn)手勢里面設(shè)置 ges.rotation = 0 來復(fù)原它的角度值

2、假如我們需要多手勢一起用的時候就需要設(shè)置下delegate 里面的一個返回參數(shù)的方法了

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

以上所述是小編給大家介紹的IOS中各種手勢操作實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 泗洪县| 乐东| 泌阳县| 昌都县| 普宁市| 阿拉尔市| 肇源县| 库伦旗| 布尔津县| 临高县| 靖宇县| 大同县| 独山县| 台湾省| 昌平区| 乌拉特后旗| 巩义市| 珠海市| 永川市| 滨海县| 蕉岭县| 临武县| 凯里市| 无棣县| 白城市| 弥渡县| 三穗县| 泽普县| 长汀县| 德阳市| 道孚县| 武邑县| 龙游县| 龙口市| 大悟县| 大竹县| 黄冈市| 拉萨市| 镇巴县| 建昌县| 衡阳县|