亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS開發中的手勢操作詳細介紹

2020-02-19 15:57:24
字體:
來源:轉載
供稿:網友

本篇文章介紹了iOS開發中的手勢操作詳細介紹,下面小編給大家介紹詳細的解決步驟

手勢操作---識別單擊還是雙擊
在視圖上同時識別單擊手勢和雙擊手勢的問題在于,當檢測到一個單擊操作時,無法確定是確實是一個單擊操作或者只是雙擊操作中的第一次點擊。解決這個問題的方法就是:在檢測到單擊時,需要等一段時間等待第二次點擊,如果沒有第二次點擊,則為單擊操作;如果有第二次點擊,則為雙擊操作。
檢測手勢有兩種方法,一種是定制子視圖,重寫視圖從UIResponder類中繼承來的事件處理方法,即touchesBegan:withEvent:等一系列方法來檢測手勢;另一個方法是使用手勢識別器,即UIGestureRecognizer的各種具體子類。
一.重寫事件處理方法

?

?

- (id)init {?
??? if ((self = [super init])) {?
??????? self.userInteractionEnabled = YES;?
??????? self.multipleTouchEnabled = YES;?
??????? // ...?
??? }?
??? return self;?
}?
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event?
{?
??? [NSObject cancelPreviousPerformRequestsWithTarget:self];?
??? UITouch *touch = [touches anyObject];?
??? CGPoint touchPoint = [touch locationInView:self];?
?
??? if (touch.tapCount == 1) {?
??????? [self performSelector:@selector(handleSingleTap:) withObject:[NSValue valueWithCGPoint:touchPoint] afterDelay:0.3];?
??? }else if(touch.tapCount == 2)?
??? {?
??????? [self handleDoubleTap:[NSValue valueWithCGPoint:touchPoint]];?
??? }?
}?
?
-(void)handleSingleTap:(NSValue*)pointValue?
{?
??? CGPoint touchPoint = [pointValue CGPointValue];?
??? //...?
}?
?
-(void)handleDoubleTap:(NSValue*)pointValue?
{?
??? CGPoint touchPoint = [pointValue CGPointValue];?
??? //...?
}?

?

首先確認定制視圖的userInteractionEnabled和multipleTouchEnabled屬性都為YES.
在touchesEnded:withEvent:方法中,如果是第一次觸摸結束,則cancelPreviousPerformRequestsWithTarget:方法不會起作用,因為self未調度任何方法,此時tapCount為1,使用performSelector:withObject:afterDelay:調用單擊事件處理方法,在0.3s鐘后執行。


[self performSelector:@selector(handleSingleTap:) withObject:[NSValue valueWithCGPoint:touchPoint] afterDelay:0.3];

?

?


如果這是一個單擊操作,則后面0.3鐘內不會再有觸摸事件,則handleSingleTap:方法執行,這樣識別出了單擊操作。
如果這是一個雙擊操作,則第二次點擊在0.3s內觸發,在第二次觸摸操作的touchesEnded:withEvent:方法中,cancelPreviousPerformRequestsWithTarget:首先會取消之前對handleSingleTap:方法的調度,使之不會執行,然后在調用handleDoubleTap:方法處理雙擊操作。
二.使用Gesture Recognizer
使用Gesture Recognizer識別就會簡單許多,只需添加兩個手勢識別器,分別檢測單擊和雙擊事件,設置必要的屬性即可。

?

?

?

- (id)init {?
??? if ((self = [super init])) {?
??? self.userInteractionEnabled = YES;?
??????? UITapGestureRecognizer *singleTapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleSingleTap:)];?
??????? singleTapGesture.numberOfTapsRequired = 1;?
??????? singleTapGesture.numberOfTouchesRequired? = 1;?
??????? [self addGestureRecognizer:singleTapGesture];?
?
??????? UITapGestureRecognizer *doubleTapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleDoubleTap:)];?
??????? doubleTapGesture.numberOfTapsRequired = 2;?
??????? doubleTapGesture.numberOfTouchesRequired = 1;?
??????? [self addGestureRecognizer:doubleTapGesture];?
?
??????? [singleTapGesture requireGestureRecognizerToFail:doubleTapGesture];?
??? }?
??? return self;?
}?
-(void)handleSingleTap:(UIGestureRecognizer *)sender{?
??? CGPoint touchPoint = [sender locationInView:self];?
??? //...?
}?
-(void)handleDoubleTap:(UIGestureRecognizer *)sender{?
??? CGPoint touchPoint = [sender locationInView:self];?
??? //...?
}?

?

唯一需要注意的是

?

[singleTapGesture requireGestureRecognizerToFail:doubleTapGesture];?


這句話的意思時,只有當doubleTapGesture識別失敗的時候(即識別出這不是雙擊操作),singleTapGesture才能開始識別,同我們一開始講的是同一個問題。

?


UIGestureRecognizer小應用
1、輕拍手勢:雙指、單擊,修改imageView的frame為(0,0,320,200)
2、長按手指:單指,修改imageView的alpha=0.5
3、實現平移、旋轉、捏合
4、輕掃:豎向輕掃實現圖:像隨機切換顯示;橫向輕掃實現:圖像消失,隨機修改imageview的背景顏色
5、imageview每次只能添加一種手勢識別器。

?


#define _originalRect CGRectMake(10, 50, 300, 450)?
#define _originalImageName? @"h4.jpeg"?
?
#import "HMTRootViewController.h"?
?
@interface HMTRootViewController (){?
?
??? UITapGestureRecognizer?????? * _tapGesture;?
??? UILongPressGestureRecognizer * _longGesture;?
??? UIPanGestureRecognizer?????? * _panGesture;?
??? UIRotationGestureRecognizer? * _rotateGesture;?
??? UIPinchGestureRecognizer???? * _pinchGesture;?
??? UISwipeGestureRecognizer???? * _verticalSwipeGesture;?
??? UISwipeGestureRecognizer???? * _horizontanlSwipeGesture;?
??? BOOL isTopDownOfRightLeft;??? // 垂直滑動是YES,水平滑動是NO?
?????
}?
?
@property (nonatomic,retain) UIButton * button;?
@property (nonatomic,retain) UIImageView * imageView;?
?
@end?
?
@implementation HMTRootViewController?
?
- (void)dealloc{?
?????
??? RELEASE_SAFELY(_imageView);?
??? RELEASE_SAFELY(_button);?
??? [super dealloc];?
?
}?
?
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil?
{?
??? self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];?
??? if (self) {?
??????? // Custom initialization?
??????? isTopDownOfRightLeft = YES;?
??? }?
??? return self;?
}?
?
- (void)viewDidLoad?
{?
??? [super viewDidLoad];?
??? // Do any additional setup after loading the view.?
?????
??? [self createButtonView];?
??? [self createImageView];?
?
}?
?
#pragma mark - 設置圖像?
- (void)createImageView{?
?????
??? self.imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:_originalImageName]];?
??? _imageView.frame = CGRectMake(10, 50, 300, 450);?
??? _imageView.userInteractionEnabled = YES;?
??? [self.view addSubview:_imageView];?
??? [_imageView release];?
}?
?
?
?
#pragma mark - 設置手勢?
?
#pragma mark? 點擊手勢?
- (void)createTapGestureRecognizer{?
????
?
??? _tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(TapGestureRecognizer:)];?
??? _tapGesture.numberOfTapsRequired = 1;?
??? _tapGesture.numberOfTouchesRequired = 2;?
??? [self.imageView addGestureRecognizer:_tapGesture];?
??? [_tapGesture release];?
?
}?
?
- (void)TapGestureRecognizer:(UITapGestureRecognizer *)tapGesture{?
?
??? self.imageView.frame = CGRectMake(0, 0, 320, 200);?
??? NSLog(@"%@",NSStringFromCGRect(self.imageView.frame));?
?
}??
?
#pragma mark? 長按手勢?
- (void)createLongGestureRecognizer{?
?????
??? _longGesture = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longGestureRecognizer:)];?
??? _longGesture.numberOfTouchesRequired = 1;?
??? _longGesture.minimumPressDuration = 1.0;?
??? [self.imageView addGestureRecognizer:_longGesture];?
??? [_longGesture release];?
?????
}?
?
- (void)longGestureRecognizer:(UILongPressGestureRecognizer *)longGesture{?
?
??? self.imageView.alpha = 0.5;?
??? NSLog(@"%s",__FUNCTION__);?
?
}?
?
#pragma mark 平移拖拽手勢?
- (void)createPanGestureRecognizer{?
?????
??? _panGesture = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGestureRecognizer:)];?
??? [self.imageView addGestureRecognizer:_panGesture];?
??? [_panGesture release];?
?????
}?
?
- (void)panGestureRecognizer:(UIPanGestureRecognizer *)panGesture{?
?????
??? NSLog(@"%s",__FUNCTION__);?
??
??? CGPoint txty = [panGesture translationInView:self.view];?
??? self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, txty.x, txty.y);?
?????
??? [panGesture setTranslation:CGPointMake(0, 0) inView:self.view];?
?????
}?
?
#pragma mark 旋轉手勢?
- (void)createRotationGestureRecognizer{?
?????
?????
??? _rotateGesture = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGestureRecognizer:)];?
??? [self.imageView addGestureRecognizer:_rotateGesture];?
??? [_rotateGesture release];?
?????
}?
?
- (void)rotationGestureRecognizer:(UIRotationGestureRecognizer *)rotateGesture{?
?????
??? NSLog(@"%s",__FUNCTION__);?
??? self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, rotateGesture.rotation);?
??? rotateGesture.rotation = 0;?
?????
}?
?
#pragma mark 捏合縮放手勢?
- (void)createPinchGestureRecognizer{?
?????
??? _pinchGesture = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchGestureRecognizer:)];?
??? [self.imageView addGestureRecognizer:_pinchGesture];?
??? [_pinchGesture release];?
?????
}?
?
- (void)pinchGestureRecognizer:(UIPinchGestureRecognizer *)pinchGesture{?
?????
??? NSLog(@"%s",__FUNCTION__);?
??? self.imageView.transform = CGAffineTransformScale(self.imageView.transform, pinchGesture.scale, pinchGesture.scale);?
??? pinchGesture.scale = 1;?
?????
}?
?
#pragma mark - 輕掃手勢?
#pragma mark 上下 豎 垂直輕掃?
- (void)createVerticalSwipeGestureRecognizer{?
????
??? _verticalSwipeGesture = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGestureRecognizer:)];?
??? _verticalSwipeGesture.direction = UISwipeGestureRecognizerDirectionUp | UISwipeGestureRecognizerDirectionDown;?
??? [self.imageView addGestureRecognizer:_verticalSwipeGesture];?
??? [_verticalSwipeGesture release];?
}?
?
#pragma mark 水平 左右輕掃?
- (void)createHorizontanlSwipeGesture{?
?????
??? _horizontanlSwipeGesture = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGestureRecognizer:)];?
??? _horizontanlSwipeGesture.direction = UISwipeGestureRecognizerDirectionLeft |UISwipeGestureRecognizerDirectionRight;?
??? [self.imageView addGestureRecognizer:_horizontanlSwipeGesture];?
?????
}?
?
- (void)swipeGestureRecognizer:(UISwipeGestureRecognizer *)swipeGesture{?
?????
??? NSLog(@"%s",__FUNCTION__);?
????
??? if (swipeGesture.direction == (UISwipeGestureRecognizerDirectionUp|UISwipeGestureRecognizerDirectionDown)) {?
??????? self.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"h%i.jpeg",arc4random()%7+1]];?
??????? ;?
?
??? }else if (swipeGesture.direction == (UISwipeGestureRecognizerDirectionLeft|UISwipeGestureRecognizerDirectionRight)){?
?????
??????? self.imageView.image = nil;?
??????? self.imageView.backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1.0];?
??? }?
}?
?
?
#pragma mark - 設置按鈕?
- (void)createButtonView{?
?????
??? NSArray * buttonArray = @[@"輕點",@"長按",@"平移",@"旋轉",@"捏合",@"輕掃"];?
?????
??? for (int i = 0; i ?????????
??????? self.button = [UIButton buttonWithType:UIButtonTypeSystem];?
??????? _button.frame = CGRectMake(10+50*i, 500, 50, 48);?
??????? [_button setTitle:[buttonArray objectAtIndex:i] forState:UIControlStateNormal];?
??????? [_button addTarget:self action:@selector(onClikButton:) forControlEvents:UIControlEventTouchUpInside];?
??????? _button.tag = i;?
??????? [self.view addSubview:_button];?
??? }?
???
}?
?
- (void)onClikButton:(UIButton *)button{?
?????
??? [self resetImageView];?
??? switch (button.tag) {?
??????? case 0:?
???
??????????? [self createTapGestureRecognizer];?
??????????? break;?
??????? case 1:?
??
??????????? [self createLongGestureRecognizer];?
??????????? break;?
??????? case 2:?
?????????
??????????? [self createPanGestureRecognizer];?
??????????? break;?
??????? case 3:?
????????????
??????????? [self createRotationGestureRecognizer];?
??????????? break;?
??????? case 4:?
?????????????
??????????? [self createPinchGestureRecognizer];?
??????????? break;?
??????? case 5:?
??????????? if (isTopDownOfRightLeft == YES) {?
??????????????? [self createVerticalSwipeGestureRecognizer];?
??????????????? isTopDownOfRightLeft = NO;?
??????????? } else {?
??????????????? [self createHorizontanlSwipeGesture];?
??????????????? isTopDownOfRightLeft = YES;?
??????????? }?
??????????? break;?
??????? default:?
??????????? break;?
??? }?
?????
}?
?
#pragma mark - 重置imageView?
- (void)resetImageView?
{?
??? for (int i = 0; i ??????? [self.imageView removeGestureRecognizer:[self.imageView.gestureRecognizers objectAtIndex:i]];?
??? }?
??? self.imageView.alpha = 1.0;?
??? self.imageView.transform = CGAffineTransformIdentity;?
??? self.imageView.frame = _originalRect;?
??? self.imageView.image = [UIImage imageNamed:_originalImageName];?
}?
?
?
- (void)didReceiveMemoryWarning?
{?
??? [super didReceiveMemoryWarning];?
??? // Dispose of any resources that can be recreated.?
}?
?
@end?

以上就是iOS開發中的手勢操作詳細介紹的全部內容介紹了,希望小編整理的相關知識和資料都對你們有所幫助,更多內容請繼續關注武林技術頻道網站!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕久热精品视频在线| 久久国产精品久久久久久久久久| 欧美韩国理论所午夜片917电影| 中文字幕亚洲一区二区三区五十路| 亚洲free性xxxx护士白浆| 成人信息集中地欧美| 在线观看日韩专区| 亚洲97在线观看| 亚洲国产小视频在线观看| 国产日韩欧美一二三区| 成人伊人精品色xxxx视频| 亚洲欧美在线磁力| 中文字幕久久久| 日韩av日韩在线观看| 亚洲午夜久久久久久久| 日韩精品免费在线| 亚洲欧美制服综合另类| 国产69久久精品成人看| 中文字幕亚洲欧美日韩高清| 伊人成人开心激情综合网| 精品久久久久久| 亚洲深夜福利网站| 亚洲黄色在线看| 亚洲影院污污.| 久久中文字幕在线| 成人黄色午夜影院| 国产福利精品av综合导导航| 亚洲精品电影在线| 欧美亚洲激情在线| 福利一区福利二区微拍刺激| 国产亚洲激情在线| 亚洲tv在线观看| 欧美激情一级欧美精品| 欧美日韩国产一区中文午夜| 日韩经典中文字幕| 国产成人在线亚洲欧美| 91精品国产沙发| 91在线高清免费观看| 92看片淫黄大片欧美看国产片| 成人国产在线视频| 全亚洲最色的网站在线观看| 亚洲精品www| 日韩欧美亚洲综合| 国产精品中文字幕在线| 91精品国产91久久久久久| 国产专区精品视频| 少妇久久久久久| 色综合亚洲精品激情狠狠| 在线观看欧美视频| 92裸体在线视频网站| 亚洲成人精品久久| 欧美日韩性生活视频| 91久久久久久久一区二区| 亚洲色图25p| 亚洲qvod图片区电影| 欧美在线一区二区三区四| 成人午夜激情网| 九九热r在线视频精品| 日韩精品在线影院| 国产精品h在线观看| 国产欧美精品一区二区| 欧美激情视频网站| 国产精品久久久久久久久男| 久久久久亚洲精品| 久久人人爽人人| 色综合影院在线| 日韩精品视频在线观看网址| 最近2019年日本中文免费字幕| 欧美视频13p| 国产精品视频午夜| 亚洲精品456在线播放狼人| 国产69精品久久久| 国产精品丝袜高跟| 国产视频精品一区二区三区| 成人免费看片视频| 亚洲伊人久久大香线蕉av| 国产欧美一区二区三区视频| 亚洲国产欧美自拍| 亚洲综合视频1区| 国产精品入口福利| 国产精品美乳在线观看| 欧美日韩午夜激情| 亚洲韩国日本中文字幕| 亚洲娇小xxxx欧美娇小| 午夜精品在线视频| 成人免费淫片视频软件| 亚洲国产精品人人爽夜夜爽| 欧美大胆在线视频| 最好看的2019年中文视频| 亚洲成人国产精品| 日韩专区在线播放| 国产精品7m视频| 91精品视频在线播放| 美女av一区二区三区| 欧美成人精品在线| 在线播放日韩av| 国产精品综合不卡av| 亚洲人成电影在线观看天堂色| 亚洲美女免费精品视频在线观看| 97免费在线视频| 美女黄色丝袜一区| 日韩第一页在线| 91精品国产高清自在线看超| 欧美精品激情在线| 欧美日韩国产一区在线| 日韩成人免费视频| 国产激情综合五月久久| 久久久久久久久久国产精品| 欧美精品在线第一页| 欧美成人午夜激情| 亚洲人成网在线播放| 欧美电影免费播放| 亚洲电影免费观看高清完整版在线观看| 最近2019中文免费高清视频观看www99| 国内精品模特av私拍在线观看| 国产精品视频区1| 91在线观看欧美日韩| 欧美久久精品午夜青青大伊人| 亚洲第一免费播放区| 日韩视频在线观看免费| 亚洲网在线观看| 欧美日韩中文字幕在线视频| 伊人伊人伊人久久| 日韩精品视频在线观看免费| 欧美精品一区二区三区国产精品| 色先锋资源久久综合5566| 国产亚洲精品久久久| 日韩成人在线视频| 国产精品看片资源| 深夜福利国产精品| 欧美疯狂做受xxxx高潮| xxxxxxxxx欧美| 91亚洲va在线va天堂va国| 一区二区三区日韩在线| 成人午夜激情网| 国产成一区二区| 黄色成人av网| 日韩免费观看av| 69视频在线播放| 精品无人国产偷自产在线| 国产成人免费av| 欧美午夜激情视频| 亚洲第一福利视频| 97在线视频免费| 国产精品色婷婷视频| 欧美大片欧美激情性色a∨久久| 亚洲一区二区中文字幕| 这里只有视频精品| 欧美日韩在线观看视频小说| 亚洲第一免费网站| 成人xvideos免费视频| 欧美性猛交xxxx免费看漫画| 国产v综合v亚洲欧美久久| 欧美人成在线视频| 国产精品成人久久久久| 九九热99久久久国产盗摄| 日韩在线激情视频| 在线视频日韩精品| 超碰日本道色综合久久综合| 日本精品视频网站| 91精品91久久久久久| 久久精品亚洲94久久精品| 色爱av美腿丝袜综合粉嫩av| 国产亚洲欧美另类中文|