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

首頁 > 系統 > iOS > 正文

iOS使用CoreMotion實現搖一搖功能

2019-10-21 18:40:56
字體:
來源:轉載
供稿:網友

現在網上介紹的iOS搖一搖功能,基本是以借助系統的ShakeToEdit功能來實現,什么是ShakeToEdit?看下圖應該就能懂:

 iOS,CoreMotion,搖一搖

怎么實現?請看以下代碼:

//ViewController 加入以下兩方法 -(BOOL)canBecomeFirstResponder { //讓當前controller可以成為firstResponder,這很重要   return YES; } -(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {   if (event.subtype==UIEventSubtypeMotionShake) {     //做你想做的事   } } //在viewDidView中調用以下消息,主動讓當前controller成為firstResponder [self becomeFirstResponder]; //已經不需要其它多余代碼了 

  這個方法最簡單,但這個功能有時候會失效。它失效的時候,系統所有搖一搖撤銷重做都會不起作用,從而導致包括所有關聯的Shake事件也不起作用。失效原因或在什么情況下失效,目前還沒有相關資料。據這兩天個人觀察,大多發生在手機放在褲袋中走10多分鐘路之后(iPhone5S iOS 7.05).是否因為搖得太久了,系統為了省電就關閉此功能呢?希望大家也拿自己手機來試一試,我們一起來看看這到底是什么問題。

  要恢復,最直接的是連接iTunes,否則,就要讓手機平放一段時間,但時候平放一天都沒有恢復。所以說此方式不太穩定,微信及其它有搖一搖功能的應用,他們的搖一搖并不受此影響,而且微信的搖一搖動作比ShakeToEdit要輕,可以講手動動一下就激活了。于是我認為,這些應用都放棄了ShakeToEdit,使用了加速儀,自己重新實現。

  使用加速儀與使用相機,聲音之類不同,不需要經過用戶允許,也沒有訪問限制,當然也沒什么危害,是個基本配備。那要怎么做?下面費話不多說,直接開始吧:

第一步,為項目TARGET添加CoreMotion.framework

 iOS,CoreMotion,搖一搖

第二步,引入頭文件

#import <CoreMotion/CoreMotion.h> 

第三步,使用CMMotionManager

@property (strong,nonatomic) CMMotionManager *motionManager; 

注意,當前應用只能有一個CMMotionManager實例,多個實例會影響接收速率

第四步,實例并初始化加速儀

self.motionManager = [[CMMotionManager alloc] init];//一般在viewDidLoad中進行 self.motionManager.accelerometerUpdateInterval = .1;//加速儀更新頻率,以秒為單位 

第五步,開始接收加速儀數據(startAccelerometerUpdatesToQueue:withHandler:)

-(void)viewDidAppear:(BOOL)animated {   [self startAccelerometer]; } -(void)startAccelerometer {   //以push的方式更新并在block中接收加速度   [self.motionManager startAccelerometerUpdatesToQueue:[[NSOperationQueue alloc]init]      withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {     [self outputAccelertionData:accelerometerData.acceleration];     if (error) {       NSLog(@"motion error:%@",error);     }   }]; } -(void)outputAccelertionData:(CMAcceleration)acceleration {   //綜合3個方向的加速度   double accelerameter =sqrt( pow( acceleration.x , 2 ) + pow( acceleration.y , 2 )      + pow( acceleration.z , 2) );   //當綜合加速度大于2.3時,就激活效果(此數值根據需求可以調整,數據越小,用戶搖動的動作就越小,越容易激活,反之加大難度,但不容易誤觸發)   if (accelerameter>2.3f) {  //立即停止更新加速儀(很重要?。?    [self.motionManager stopAccelerometerUpdates];          dispatch_async(dispatch_get_main_queue(), ^{       //UI線程必須在此block內執行,例如搖一搖動畫、UIAlertView之類     });   }   } -(void)viewDidDisappear:(BOOL)animated {   //停止加速儀更新(很重要?。?  [self.motionManager stopAccelerometerUpdates]; } 

最后一步

至此,搖一搖核心已經實現,但還差最后一步:當App退到后臺時必須停止加速儀更新,回到當前時重新執行。否則應用在退到后臺依然會接收加速度更新,可能會與其它當前應用沖突,產生不好的體驗。所以,分別在viewDidAppear和viewDidDisappear中加入如下監聽:

//viewDidAppear中加入 [[NSNotificationCenter defaultCenter] addObserver:self      selector:@selector(receiveNotification:)      name:UIApplicationDidEnterBackgroundNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self      selector:@selector(receiveNotification:)      name:UIApplicationWillEnterForegroundNotification object:nil]; 
//viewDidDisappear中取消監聽 [[NSNotificationCenter defaultCenter] removeObserver:self      name:UIApplicationDidEnterBackgroundNotification object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self      name:UIApplicationWillEnterForegroundNotification object:nil]; 
//對應上面的通知中心回調的消息接收 -(void)receiveNotification:(NSNotification *)notification {   if ([notification.name      isEqualToString:UIApplicationDidEnterBackgroundNotification])   {     [self.motionManager stopAccelerometerUpdates];   }else{     [self startAccelerometer];  }} 

至此,所有使用加速儀實現搖一搖功能的實現方式已介紹完畢。

一些可改進的地方:

  1) 搖一搖動作捕捉——如果僅是以加速度大小來判定,有可能用戶突然快速移動手機時就激活了搖動,但用戶比較稍稍慢一些來回晃動手機卻不會激活,可能與用戶期望的稍微有出入。系統的ShakeToEdit就能做得比較到位。
   我們可以結合定時器與加速度的正反方向來更精確判定用戶的搖一搖動作,例如:綜合加速度改為帶方向的向量,然后當1.5秒內有相反兩個方向大于某個數值的加速度,才算為一個搖動行為。這個1.5秒時間需要通過實際測試來取值,當某次取得的加速度值大于某個值開始統計下一個加速度向量,此值也需要實測來取值,可能1.5左右就夠了。

  2) App狀態更改——如果激活的搖一搖是個長時間等待行為,例如彈出ActionSheet讓用戶選擇操作。在用戶進行下一步操作前,ActionSheet沒消失前,不應該啟動下一次監聽,包括應用從后臺回到當前狀態后,也要判斷用戶是否有過下一步行為。

參考文獻:鏈接地址

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人av在线网址| 国产精品爽爽爽爽爽爽在线观看| 亚洲人成在线观看网站高清| 中文字幕久热精品在线视频| 欧美激情va永久在线播放| 国产在线视频91| 国产在线精品一区免费香蕉| 国产成人久久精品| 中文字幕日韩综合av| 国产精品中文在线| zzijzzij亚洲日本成熟少妇| 日韩av免费一区| 欧美高清视频在线播放| 狠狠躁18三区二区一区| 欧美亚洲激情在线| 亚洲男人的天堂在线| 成人免费高清完整版在线观看| 国产欧美在线看| 成人亲热视频网站| 国产精品一区二区久久久| 欧美性猛交xxxx免费看久久久| 亚洲**2019国产| 38少妇精品导航| 精品激情国产视频| 日日噜噜噜夜夜爽亚洲精品| 色视频www在线播放国产成人| 成人黄色免费在线观看| 伊人久久大香线蕉av一区二区| 日韩经典中文字幕在线观看| 啊v视频在线一区二区三区| 91精品视频网站| 亚洲美女av黄| 亚洲男人天天操| 久久久99久久精品女同性| 成人午夜在线影院| 在线精品视频视频中文字幕| 国产精品嫩草影院一区二区| 亚洲伊人久久大香线蕉av| 国内外成人免费激情在线视频网站| 中文字幕av日韩| 日韩欧美在线视频| 国产精品久久久亚洲| 最近的2019中文字幕免费一页| 国产主播喷水一区二区| 美日韩丰满少妇在线观看| 2019中文在线观看| 日韩欧美在线免费观看| 性日韩欧美在线视频| 欧美大片在线影院| 国产成人av在线播放| 国产精品爱久久久久久久| 81精品国产乱码久久久久久| 在线播放日韩专区| 久久av资源网站| 韩曰欧美视频免费观看| 日韩小视频网址| 午夜精品久久久久久久99黑人| 国产999精品久久久影片官网| 亚洲欧美日韩高清| 色阁综合伊人av| 少妇久久久久久| 亚洲精品国精品久久99热| 日韩电视剧在线观看免费网站| 欧美成人午夜激情在线| 最近2019中文字幕第三页视频| 欧美成人免费在线视频| 日韩一区视频在线| 亚洲欧美另类国产| 日韩激情av在线播放| 欧美激情久久久久久| 日韩av电影手机在线| 久久精品亚洲94久久精品| 久久视频免费在线播放| 在线电影av不卡网址| 亚洲精品国产免费| 亚洲精品福利资源站| 国产精品大陆在线观看| 亚洲女性裸体视频| 日韩一区二区三区在线播放| 亚洲区在线播放| 日韩美女av在线| 欧美成人一区二区三区电影| 亚洲成年网站在线观看| 91欧美精品午夜性色福利在线| 亚洲影视九九影院在线观看| 日韩在线免费观看视频| 国产亚洲在线播放| 亚洲毛片在线免费观看| 91成人免费观看网站| 日韩av一区在线| 精品色蜜蜜精品视频在线观看| 欧美激情va永久在线播放| 51色欧美片视频在线观看| 91免费高清视频| 日韩经典中文字幕在线观看| 精品国偷自产在线视频| 久久久www成人免费精品| 午夜精品国产精品大乳美女| 亚洲一区二区三区乱码aⅴ| 欧美肥婆姓交大片| 久99九色视频在线观看| 亚洲欧美日韩天堂| 欧美性少妇18aaaa视频| 川上优av一区二区线观看| 人人爽久久涩噜噜噜网站| 在线a欧美视频| 在线精品高清中文字幕| 动漫精品一区二区| 国产精品美女www| 亚洲福利视频专区| 亚洲精品女av网站| 国产精品免费久久久| 亚洲国产成人久久综合一区| 中文字幕av一区二区| 中文日韩电影网站| www亚洲精品| 欧美黑人极品猛少妇色xxxxx| 91亚洲精品一区二区| 欧美有码在线观看| 国产成人精彩在线视频九色| 欧美日韩亚洲天堂| 欧美亚洲另类制服自拍| 亚洲视频欧洲视频| 色视频www在线播放国产成人| 国产精品男人爽免费视频1| 狠狠躁夜夜躁久久躁别揉| 日韩中文有码在线视频| 欧美激情乱人伦一区| 中文字幕一区二区三区电影| 亚洲aa在线观看| 国产精品久久久久9999| 欧美丝袜第一区| 另类天堂视频在线观看| 欧美肥臀大乳一区二区免费视频| 欧美人与物videos| 日韩欧美综合在线视频| 欧美日在线观看| 红桃视频成人在线观看| 久久免费观看视频| 色婷婷综合成人av| 国产精品综合网站| 久久99热精品这里久久精品| 亚洲日韩中文字幕在线播放| 91精品久久久久久久久| 日韩精品福利在线| 久久精品最新地址| 欧美电影在线免费观看网站| 中文字幕亚洲在线| 亚洲一区二区中文字幕| 日韩成人久久久| 国产精品偷伦视频免费观看国产| 国产午夜精品免费一区二区三区| 理论片在线不卡免费观看| 92看片淫黄大片看国产片| 国产精品18久久久久久首页狼| 欧美大全免费观看电视剧大泉洋| 91九色视频在线| 欧美人与性动交a欧美精品| 精品五月天久久| 亚洲人精选亚洲人成在线| 亚洲日本中文字幕免费在线不卡| 亚洲免费视频观看| 国产精品夜间视频香蕉| 日韩中文字幕精品视频|