觸摸事件,有屏幕捕捉到的用戶對(duì)屏幕的操作(點(diǎn)擊稳吮,雙擊缎谷,長(zhǎng)按,滑動(dòng)灶似,捏合列林,)
APP中使用最多的就是觸摸事件,基本空間都封裝了觸摸方法酪惭。
從下面的幾個(gè)代理方法中可以獲取觸摸狀態(tài)希痴,并且做出交互。
下面的代碼是對(duì)一個(gè)基礎(chǔ)控件的一個(gè)封裝春感,改變中心點(diǎn)
//觸摸開(kāi)始
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
//沖突润梯,要添加原來(lái)自帶的手勢(shì)
[super touchesBegan:touches withEvent:event];
//獲取觸摸對(duì)象
UITouch *touch = [touches anyObject];
//記錄觸摸開(kāi)始的位置
self.startPoint = [touch locationInView:self];
}
//觸摸移動(dòng)
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[super touchesMoved:touches withEvent:event];
//計(jì)算手指移動(dòng)距離
UITouch *touch = [touches anyObject];
//手指現(xiàn)在的位置
CGPoint currentPoint = [touch locationInView:self];
//計(jì)算x,y的差值
CGFloat xChange = currentPoint.x - self.startPoint.x;
CGFloat yChange = currentPoint.y - self.startPoint.y;
//改變中心點(diǎn)
self.center = CGPointMake(self.center.x + xChange, self.center.y + yChange);
//打印坐標(biāo)點(diǎn)
NSLog(@"移動(dòng)%@", NSStringFromCGPoint(self.center));
}
//觸摸結(jié)束
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[super touchesEnded:touches withEvent:event];
NSLog(@"結(jié)束%@", NSStringFromCGPoint(self.center));
}
運(yùn)動(dòng)事件,由加速計(jì)捕捉到的用戶操作(典型的是:微信搖一搖)(計(jì)步)
一般是通過(guò)晃動(dòng),在代理方法中獲取搖晃狀態(tài)纺铭,進(jìn)行交互寇钉,最典型的就是微信搖一搖,下面的代碼是根據(jù)晃動(dòng)隨機(jī)的改變界面顏色
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
NSLog(@"搖晃開(kāi)始");
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
NSLog(@"搖晃結(jié)束");
self.view.backgroundColor = [UIColor colorWithRed:arc4random() % 256 / 255.0 green:arc4random() % 256 / 255.0 blue:arc4random() % 256 / 255.0 alpha:arc4random() % 256 / 255.0];
}
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event {
NSLog(@"搖晃取消");
}
遙控事件舶赔,例如耳機(jī)線控扫倡,藍(lán)牙,遙控器
這種不在這里多做解釋竟纳,有興趣的讀者可以查找資料