你好,歡迎來到IOS教程網

 Ios教程網 >> IOS基礎知識 >> IOS基礎知識 >> iOS基礎:UIEvent事件類型簡單總結(觸摸、搖一搖、遠程控制)

iOS基礎:UIEvent事件類型簡單總結(觸摸、搖一搖、遠程控制)

日期:2017/3/13 15:19:36      編輯:IOS基礎知識

UIEvent 事件類型:

  • 觸摸事件(UIEventTypeTouches )

    • 觸摸事件包括一個或者多個觸摸(touches), 每個觸摸有一個UITouch對象表示。當觸摸事件發生時,系統會通過觸摸處理的邏輯找到合適的responder並把UIEvent對象傳遞過去。responder通過touchesBegan:withEvent:等方法去接收UIEvent對象。

  • 加速計事件,運動事件(UIEventTypeMotion  )

    • 晃動設備等

  • 遠程控制事件 (UIEventTypeRemoteControl)

    • 主要是外部輔助設備或者耳機的遠程命令,例如控制音樂聲音的大小,或者下一首歌。


  • 觸摸相關方法:

/**
 下面的四個方法都有的參數:
 @param NSSet  *) touches 觸摸點集合 (根據觸摸點的個數可以判斷是幾個觸摸點)
 @param event   事件對象,記錄事件產生的時刻和類型(下面的四個方法傳入都是同一個對象)
 */


// 開始觸摸
// 手指開始觸摸view,系統會自動調用方法

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

}
// 手指在view上移動,系統會自動調用(隨著手指的移動,會持續調用該方法)
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

}
// 一手指離開view,系統會自動調用方法
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

}
// 觸摸結束前,有可能系統的事件打斷了觸摸的響應,會調用的方法。(系統方法例如:電話來了)
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{

}

UITouch 對象:

  • 我們用手指觸摸屏幕的時候,就會創建一個與觸摸點關聯的 UITouch 對象,每一個觸摸點對應一個UITouch 實例對象

  • 這個對象保存了與觸摸相關的信息(位置、時間、階段)

  • 觸摸點改變(手指移動),系統對應更新 UITouch 對象,適時地記錄觸摸點信息。

  • 觸摸結束時候,UITouch 對象被銷毀

    UITouch 方法:

    • 返回當前觸摸點在 View 上面的位置,傳入 View 為 nil 時候位置是在 UIWindow。
      - (CGPoint)locationInView:(UIView *)view;

    • 返回前一個觸摸點在 View 上的位置。
      - (CGPoint)previousLocationInView:(UIView *)view;


  • 加速相關方法:

// 開始搖晃 加速計事件
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{

}
// 搖晃結束
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{

}
// 搖晃取消
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event{

}
小例子:搖一搖簡單實現GitHub
  • 准備:

    • 先在targets -> Build Phases -> Link Binary With Libraries裡面添加AudioToolbox.framework;

      • AudioservicesPlaySystemSound函數來播放簡單的聲音
        1.音頻長度小於30秒
        2.格式只能是PCM或者IMA4
        3.文件必須被存儲為.caf、.aif、或者.wav格式
        4.簡單音頻不能從內存播放,而只能是磁盤文件

        • 注意局限性: 無法循環播放聲音,也無法控制立體聲效果。可以設置一個回調函數,在音頻播放結束時被調用,可以對音頻對象做清理工作,以及通知你的程序播放結束。

    • 在模擬器中運行時,可以通過「Hardware」-「Shake Gesture」來測試「搖一搖」功能


  • 導入音頻的頭文件

    #import 
  • 定義一個回調函數,就是我們搖一搖的音效播放完回調方法函數

    // 當音頻播放完畢會調用這個函數// 在完成處理程序標簽存儲在 data 。需要到 __bridge 。static void SoundFinished(SystemSoundID soundID, void *data){  /*播放全部結束,因此釋放所有資源 */
      AudioServicesDisposeSystemSoundID(soundID);  NSLog(@"%s--->%@",__func__,(__bridge UIViewController *)data);
    }
  • 設置允許搖一搖功能

    // 允許搖一搖功能
      [UIApplication sharedApplication].applicationSupportsShakeToEdit = YES;// 設置第一響應者
      [self becomeFirstResponder];
  • 開始搖晃的時候我們播放音效

    // 注冊系統音頻ID
      SystemSoundID soundID;
    
      // 獲取聲音的路徑
      NSString *path = [[NSBundle mainBundle] pathForResource:@"59" ofType:@"m4a"];
      NSURL *soundUrl = [NSURL fileURLWithPath:path];
    
      // 根據路徑創建
      AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundUrl, &soundID);
      /*
    
       *參數說明:
       * 1、剛剛播放完成自定義系統聲音的ID
       * 2、回調函數(playFinished)執行的run Loop,NULL表示main run loop
       * 3、回調函數執行所在run loop的模式,NULL表示默認的run loop mode
       * 4、需要回調的函數
       * 5、傳入的參數, 此參數會被傳入回調函數裡
       */
      AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, SoundFinished, (__bridge void *)self);
    
      // 開始播放
      AudioServicesPlaySystemSound (soundID);
      return;
    }
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    NSLog(@"取消搖動");
    return;
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    if (event.subtype == UIEventSubtypeMotionShake) {
        // 判斷是否是搖動結束
        NSLog(@"搖動結束");
    }  
    return;  
}

遠程控制相關:

// 根據傳進來的 event 進行判斷,並進行相應操作即可。
- (void)remoteControlReceivedWithEvent:(UIEvent *)event{}



文章轉自 雲之君兮鵬的簡書
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved