觸摸事件01

觸摸事件01

這篇文章講一些觸摸事件的基本知識和兩個簡單的案例供參考
1. 移動uiview
2. 根據(jù)移動繪制星星


移動UIview的案例

可識別的三類輸入事件

  1. 觸摸事件
  2. 運(yùn)動(加速計)事件
  3. 遠(yuǎn)程控制事件

觸摸事件:指的是單點(diǎn)和多點(diǎn)觸摸事件
運(yùn)動(加速計):例如微信的搖一搖事件
遠(yuǎn)程控制:例如耳機(jī)線空歌曲(播放,暫停)

響應(yīng)者對象

在ios開發(fā)中并不是所有的對象都能處理觸摸事件,只有繼承了UIResponder的對象才能處理和接收觸摸事件。我們稱之為響應(yīng)者對象

四個不同的方法處理觸摸事件

touchesBegin、touchesMoved 、touchesEnd、touchesCanceled(這四個方法都有 touches和event參數(shù))

  • touchesBegin:觸摸時間開始
  • touchesMoves:觸摸事件的移動事件
  • tocuhesEnd:觸摸事件的結(jié)束事件
  • touchesCanceled:觸摸事件被取消,比如正在觸摸時電話打進(jìn)來,此時觸摸會被取消。

UITouch類中包含的兩個成員函數(shù):
*- (CGPoint) locationInView:(UIView *)view 針對view的坐標(biāo)系
*-(CGPoint) previousLocationInView:(UIView *)view 記錄前一個坐標(biāo)

實(shí)現(xiàn)效果

最終效果

主要代碼

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"touchesMoves%@",touches);
    //1.從nsset中去除uitouch對象
    //取出集合的一個對象,通常實(shí)在單點(diǎn)觸摸時
    UITouch *touch = [touches anyObject];
    
    //2.知道手指觸摸的位置
    CGPoint location = [touch locationInView:self.view];
    
    //2.1 對位置進(jìn)行修正  使用previousLocationInView對位置進(jìn)行修正
    CGPoint plocation = [touch previousLocationInView:self.view];
    CGPoint deltaP = CGPointMake(location.x - plocation.x, location.y-plocation.y);
    //3.設(shè)置紅色視圖的位置
    CGPoint newCenter = CGPointMake(self.redView.center.x +deltaP.x, self.redView.center.y+deltaP.y);
    [self.redView setCenter:newCenter];
    
}

中間的修正部分為 防止 第一次移動時的跳動問題,算出相對的專心點(diǎn)

第二個繪制軌跡的案例

實(shí)現(xiàn)效果

多點(diǎn)觸控和繪制軌跡

這個案例主要是多點(diǎn)觸控

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSInteger i = 0;
    //遍歷touches集合 來添加圖像
    for (UITouch *touch in touches) {
        UIImageView * imageView = [[UIImageView alloc]initWithImage:self.images[i]];
        
        CGPoint location = [touch locationInView:self.view];
        [imageView setCenter:location];
        [self.view addSubview:imageView];
        [UIView animateWithDuration:2.0f animations:^{
            [imageView setAlpha:0.5f];
            
        }completion:^(BOOL finished) {
            [imageView removeFromSuperview];
        }];
        i++;
    }

    NSLog(@"%@",touches);
}

謝謝........
write by Seven

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • -- iOS事件全面解析 概覽 iPhone的成功很大一部分得益于它多點(diǎn)觸摸的強(qiáng)大功能,喬布斯讓人們認(rèn)識到手機(jī)其實(shí)...
    翹楚iOS9閱讀 3,201評論 0 13
  • 響應(yīng)者對象 在iOS中不是任何對象都能處理事件,只有繼承了UIResponder的對象才能接收并處理事件。我們稱之...
    JonesCxy閱讀 805評論 0 0
  • 在iOS開發(fā)中經(jīng)常會涉及到觸摸事件。本想自己總結(jié)一下,但是遇到了這篇文章,感覺總結(jié)的已經(jīng)很到位,特此轉(zhuǎn)載。作者:L...
    WQ_UESTC閱讀 6,236評論 4 26
  • 概覽iPhone的成功很大一部分得益于它多點(diǎn)觸摸的強(qiáng)大功能,喬布斯讓人們認(rèn)識到手機(jī)其實(shí)是可以不用按鍵和手寫筆直接操...
    紙簡書生閱讀 1,573評論 0 6
  • 好奇觸摸事件是如何從屏幕轉(zhuǎn)移到APP內(nèi)的?困惑于Cell怎么突然不能點(diǎn)擊了?糾結(jié)于如何實(shí)現(xiàn)這個奇葩響應(yīng)需求?亦或是...
    Lotheve閱讀 59,425評論 51 604

友情鏈接更多精彩內(nèi)容