陀螺仪与方向感应器

上传人:小** 文档编号:157245360 上传时间:2022-09-29 格式:DOC 页数:17 大小:298KB
收藏 版权申诉 举报 下载
陀螺仪与方向感应器_第1页
第1页 / 共17页
陀螺仪与方向感应器_第2页
第2页 / 共17页
陀螺仪与方向感应器_第3页
第3页 / 共17页
资源描述:

《陀螺仪与方向感应器》由会员分享,可在线阅读,更多相关《陀螺仪与方向感应器(17页珍藏版)》请在装配图网上搜索。

1、ChapterII陀螺儀和方向感應器iPhoneiPad和iPodTouch放於的項功能足它們的内处力向感應器,辽個微小的裝代讨以讓iOS知道裝讥被持据的力式以及足否在移動。iOS町使川力向感應器來處理门動旋轉,而詐多遊戯也都使川它做為控制機制。此外它也对以川來偵測搖晃與突然的移動。17-1方向感應器的物理原理力向感應器(accelerometer)足籍111感應果個力向的憤竹7力人小來衡;i;贞力II速度興讥力。iOS裝鬥内的力向感應器足個讪【I的力向感應器,衣小它讨以偵測:度空冏中的移動或讥丿J。I人I此讀者对以利川力向感應器得知裝HI|询被据持的力式(像足门動旋轉功能),也可以得知它足杏

2、足、卜放在以上,址乍町以知道足世你切I:還足【IMi切卜。力向感應器的度応甲位為g丿j(g衣小疋力),所以當力向感應器傅卜I1.0的什iii&衣小它果個牯d力向感應到rig的丿j。底卜仃:-個例r:如來裝讥牛在丁:上沒仃移動,山於地心川力的關係,人約金仃ig的作川丿j在它kihi 如來裝讥足以rii-d丨l完仝乖iT-的力式持据in:,它角偵測业银書仃ig的作川丿J在yfillI. 如來裝讥足以果個几度持JW,則lg的力便角根據持捉的力式ihi分散到不同的仙。當以45度J持卿&,辽lg的力角人約均分到阳個恤上。陀螺儀和方向感應器#陀螺儀和方向感應器突然的移動則-”以籍111檢查力向感應器的们足

3、否比1g人很多來偵測。的便川帖況卜力向感應器力任何啊I上所偵測到的部不角超過lg太多。但如來讀卄搖晃、掉落或去掷裝円,則力向感應器角在個以上的恤I偵測到哺人的受丿J。不過詁不耍掉落或公擲讀卄门di勺ios裝H來測試辽個理論。圖17-1以圖形衣示力向感應器所使川的。詁注恵力向感應器使川的足胶枇華的y恤座櫟習悄川法,也就足y们增丿川衣小向上的丿J,辽剛好和弟1叨住中Quartz2D的座櫟系統术11反。陥逬右使川力向感應器搭配Quartz2D做為控制機制1厅,需要轉換y恤座櫟。但富搭配OpenGLESII(比胶讨能發4彳鈕十使川力向感應器來控制動着時)就不盅要轉換。*AT&To5:52PMAppSl

4、croConUctNote%CxkuUitorbeSporUcilariTuWkcxinior2ctUrg)h倉0蔦TwitlvrPvT3m.CoOeSSSHPtMXMM.IdnIPX圖17-1:iPhone方向感應器的三維座標軸左邊的iPhone4前視圖顯示了x和y軸。右邊的iPhone4側視圖則顯示了z軸。17-2不要忘記旋轉我們之丽提過iPhone4還仃個陀螺儀感應器,对譲證*誼収描述裝代繞幷咆I旋忡如來此感應器和力向感應器之冏的芒買石血來不沾址的話,詁想想平放在桌上的iPhone。假如谧*住該丁:機平放I则始旋轉它,力向感應器的侦不角收變。辽足内為移動丁:機的力后(在过裡只仃沿井zi|

5、i|l|.z.J卜拉的讥丿J)尿沒仃收變。(實際上的悄形則仃-點點的不同,内為誑卄丁:価到丁:機的動作足角卿發少冰的力向感應器動作)。不過在和同動作的期冏,裝代的旋轉值則角收變,特別足z啊|的旋轉值。順咼針旋轉裝讥會床心负的侦,逆咼剑旋轉則角提供山的们。佇上轉動則z啊lll勺旋刪|rg卜I到冬。陀螺儀角任裝闫發生旋忡峙通知誼卄該墳變贝,而不足記錄個絕對的旋轉值。誼*馬上就由住木讹第個範例中石到辽足如何述作。17-3CoreMotion和動作管理程式(motionmanager)從iOS4411力向感應器和陀螺儀的们足使川CoreMotion架構來仃収。此架構提供的川四中包括了CMMotionM

6、anager此類別,它町富成所仃川來描述使川卄如何移動裝闫之伸的力法。誑者的應川程式对建/:CMMotionManager的實例,然後以卜Mi的模式來利川它它对以住仃動作發就為讀卄埶行果止匕程式碼。它町以侏持永久忤的贝新結構I佰讓謔卄町以在任何mu-収最新的伉。後你砸力法很適合遊戲及具他二度/-動的應川程式,I人|為它們筒耍右血次通過遊戯迴圈II&杳詢裝円的I丨M狀態。我們將書訴證者如何Tf作辽和力式。詁汨箝CMMotionManager類別址際上不足甲實例,仙逬者的應川程式應孩把它當成足來封待。誼*應該使川【卜滩的alloc和init力法住應川程式中处芒唯的-個CMMotionManager

7、類別。所以女11來讀卄盅要從應丿|程应卩的好幾個地力來仃収動作代理程式1厅,應該在應川程式委派中建芒它屁提供從委派仃収它的權利。除fCMMotionManager類別外,CoreMotion還提供了幾個I他的類別,像足CMAccelermeterData和CMGryoData它們只足容器,誼77的應川程式J透過它們來仃収動作資料。我們右號到辽些類別II&角加以說叨。事件型動作(event-basedmotion)我們之前提過動作竹理程式的秤述作模式乱珞次動作資料改變峙就:u讀卄決行果止匕程式碣。人多数具他的CocoaTouch類別,部足和ill讓讀*辿接到辽II&候角収彳站汛息的委派*來提供辽

8、种功能*但CoreMotion的力式則仃點不卜U。I人I為它足個新的架構,只仃右iOS4之後*所以Apple決Til譲CMMotionManager使川iOS4SDK的另-aw功能也就足區兎(block)。我們右沐:|心經使川過数次區魂,現右雹Y者將石到此技刃的另秤應川。詁使川Xcode來建“個笛為MotionMonitorfl9檢視朋應川程式新占条辽金足個对誑収力向感應器資料和陀螺儀資料(仃的話)竝右噬幕上丿川以穎小的附車應川程式。本章中的應用程式無法在模擬雰上運作,因為模擬雰沒有方向感應器也沒有陀螺儀。噢,真遜。if先我們需耍將CoreMotion迎結到我們的應川程式。内汕辽足個選川的系統

9、架構,所以我們必須將它丿川人。詁按照第七农增力IIK訊1贝箱架構(在K訊IJ4箱架锚勺迎糸山節)的說叨*但不要選収AudioToolbox.frameworkMlj足選収CoreMotion.frmaework(總丨i之詁按住control鍵卩丄點按Frameworks資料夾*怡從;I;現的內容選甲小選収AddExistingFrameworks.)現右匚沾選収MotionMonitorViewController.h做卜列變史:#import#importinterfaceMotionMonitorViewController:UlViewControllerCMMotionManager*

10、motionManager;UILabel*accelerometerLabel;propertypropertyproperty(nonatomic,(nonatomic,(nonatomic,UILabel*gyroscopeLabel;retain)CMMotionManager*motionManager;retain)IBOutletUILabel*accelerometerLabel;retain)IBOutletUILabel*gyroscopeL2ibel;end过會提供我們個仃収動作代理程式木身的指標,以及對到做小資訊之櫟籤的接I丨。辽裨不人盅要解釋,所以詁繼欷血儲仏进者的變

11、史。接带:在InterfaceBuilder11改MotionMonitorViewController.xib住此nib視窗中連按-KJtMzj;來I丿出改檢視,然後從程M中拖拉出個標籤到此檢視1。調整樑籤的人小以譲它從人邊的藍色指川線跑到右邊的蓝色扌中刃線,几度則汕轻個檢視的半,然後將標籤的山端對齊lii的蓝色扌刖I線。現右M:J敢圈件项檢閱器、怡將#Lines欄位從1改成0。#Lines屬性墳足川來指足標籤111;現幾行文了,、怡对提供嚴格的上限。但如來誑者將它設為0,則沒仃限制町川,所以櫟釦j多少行都对以。接若詁按住option鍵山拖拉該標籤口九/個復木,、怡將此復木對齊檢視卜半部中的

12、蓝色扌中JI線。放後詁按住control鍵山從FilesOwner圖示拖拉到各個標籤,將accelerometerLabelfllgyroscopeLabel分別連接到I:卜個標籤。迄個簡甲的GUI經完成了,詁儲仃讀卄的I】作竝華備好進行編碼。接带:詁選収MotionMonitorViewController.mdC;Rf屈;性合成器(synthesizer)增丿川乍酗:區观的川端,將記憶忧常理呼叫增丿川到viewDidUnload和dealloc力法|1勺底部:#importMotionMonitorViewControllerhQimplementationMotionMonitorVie

13、v/ControllersynthesizemotionManager;synthesizeaccelerometerLabel;synthesizegyroscopeLabel;一(void)viewDidUnload/Releaseanyretainedsubviewsofthemainview/e.g.selfmyOutlet=nil;self.motionManager=nil;selfauuelerometerLabel=nil;self.gyrosuopeLabel=nil;superviewDidUnload;一(void)deallocmotionManagerrelease;

14、accelerometerLabelrelease;gyroscopeLabelrelease;superdealloc;end現比巾交仃趣的部分來了。詁移除viewDidLoadJj法周圍的註解櫟記血給它卜列的內容:一(void)viewDidLoadsuperviewDidLoad;self.motionManager=CMMotionManagerallocinitautorelease;NSOperationQueue*queue=NSOperationQueueallocinitautorelease;if(motionManageraccelerometerAvailable)mo

15、tionManager.aucelerometerUpdatelnterval=1.0/10.0;motionManagerstartAccelerometerUpdatesToQueue:queuewithHandler:A(CMAccelerometerData*accelerometerData,NSError*error)NSString*labelText;if(error)motionManagerstopAccelerometerUpdates;labelText=NSStringstringWithFormat:Accelerometerencounterederror:%,e

16、rror;elselabelText=NSStringstringWithFormat:nAccelerometernnx:%+2fny:%+2fnz:&+2faccelerometerDataaccelerationx,accelerometerDataaccelerationy,accelerometerDataaccelerationz;accelerometerLabelperformSelectorOnMainThread:selector(setText:)withObject:labelTextwaitUntilDone:YES;elseaccelerometerLabel.te

17、xt=nThisdevicehasnoaccelerometer.;if(motionManagergyroAvailable)motionManager.gyroUpdatelnterval=1.0/10.0;motionManagerstartGyroUpdatesToQueue:queuewithHandler:A(CMGyroData*gyroData,NSError*error)NSString*labelText;if(error)motionManagerstopGyroUpdates;labelText=NSStringstringWithFormat:Gyroscopeenc

18、ounterederror:%,error;elselabelText=NSStringstringWithFormat:Gyroscopennx:%+2fny:$+.2fnz:&+2fn,gyroDatarotationRatex,gyroDatarotationRatey,gyroDatarotationRatez;gyroscopeLabelperfoinnSelectorOnMainThread:selector(setText:)withObject:labelTextwaitUntilDone:YES;elsegyroscopeLabe1.text=nThisdevicehasno

19、gyroscopeH;此丿j法包含门改動感應器所需的个部程式碼,竝化訴它們珞1/10秒就向我們報筲次、怡同峙史新。感謝區魄的強人功能,谶切部變得附車乂緊密。現住不川將功能部分放人委派力法中,甌观小疋義的行為就可讓我們右匚役足行汕的同個力法中石見該行為!譲我們次處理小部分。就從底卜的先開始:autorelease;initautorelease;self.motionManager=CMMotionManagerallocinitNSOperationQueue*queue=NSOperationQueuealloc此程式碼li先ill7.f個CMMotionManager的實例,我們將轲使丿I

20、J它來觀察動作|匚件。然後它乂建比r-i作菜佇列,它只足堆需要完成之1】作的容器,誑卄町以I川想弟I-:V:卜。動作管理程式想要有一個佇列來放置要完成的工作,並依讀者給它的區塊所指定,每次發生一個事件。使用系統的預設佇列來做這件事是很誘人的,但CMMotionManager的說明文件明白地警告不要這麼做!因為擔心預設佇列最後塞滿了這些事件,而導致在處理其他重要的系統事件時會有困難。接井進行到設疋力向感應器。我們先檢杳以確認裝彳M力向感應器。IIijijI:山的所仃丁:持iOS裝汽都仃,但為防木來町能仃的角沒仃,所以還足们得檢査-卜。接井我們設疋贝新之冏的iii.Uir.j隔,、怡以秒汕川位來指

21、足。辽裨我們要求的足l/io秒。詁汴总辽麼般d、iC不疋保洽我們角接收到速度如此精進的贝新。示WI該肛役足如實足個I:限,只足扌斤足動件管理程式町以提供給我們的最住速率。實際上的史新讨能沒辽麼頻繁。if(motionManageraccelerometerAvailable)motionManageraccelerometerUpdatelnterval=10/10.0;接井我們代訴動作代理程式I卅始银存力向感應器的史新。我們傅人r個讓動作代理程式放円I-作的佇列,以及個足義I】作角右的次史新發/|:.ii寺完成的區塊。詁記住,區观部足從捕人符號(o開始,後你山接井以括號包也來的讦何|数,辽吟

22、j數足區观執行I戏要去塡人的(在此例中,足力向感應器的資料和代笛我們仃間題的鉛淚)最後再以內右耍執行之程式碼的人括號迪段作結尾。motionManagerstartAccelerometerUpdatesToQueue:queuewithHandler:A(CMAccelerometerData*accelerometerData,NSError*error)底卜足迪塊的內容。它角根據III询力向感應器的们处比個了小,或足如來仃冏題的話則/-個鉛淚訊息。然後它角將該人accelermeterLabel|裨我們不能I接辽麼做,I心像UILable等的UIKitl別通佶只仃在從口紈行緒中仃収II血

23、述竹:順利。III於辽段程式碣足從NSOperationQueue内執行,所以我們不知道將角住哪個特:上佇列I丨呻丸行。因此我們使丿IJperformSelectorOnMainThread:withObject:waitUntilDone:力法以讓匸、饥行緒處理此-作詁汁恵力向感應器的什i足透過傅人之accelerometerData的accelerationfeyf|-來仃収oAcceleration陆;性足CMAcceleration類丿卩9孩類型只足個包含f個float彳it的簡丫卩structaccelerometerData木身足個CMAccelerometer類別的實例,|何該類

24、別冥Tf只足CMAcceleration的包裝函式(wrapper)|(ljL_1!如地进者認Hl汕了傅送個floatI佰使川了辽麼多類別好像足沒必要的話,那麼不足只仃讀卄金辽麼想。不代如何,底卜足它的使川力式:NSString*labelText;if(error)motionManagerstopAccelerometerUpdates;labelText=NSStringstringWithFormat:Accelerometerencounterederror:%n,error;elselabelText=NSStringstringWithFormat:nAccelerometern

25、nx:%+2fny:%+2fnz:%+2f,accelerometerDataaccelerationx,accelerometerDataaccelerationy,accelerometerDataaccelerationz;accelerometerLabelperformSelectorOnMainThread:selector(setText:)withObject:labelTextwaitUntilDone:YES;接若我們結束此區塊,、怡給束開始傅人此區塊所右之力括號力法呼叫。最後我們提供完仝不同的程式碼路徑,以防裝鬥沒仃力向应應器。如丽所述,11丽所仃的iOS裝讥部仃力向感應

26、器,但能知道木來角足怎樣呢?;elseaccelerometerLabel.text=nThisdevicehasnoaccelerometer;眦X讨能汁总到陀螺儀的程式碼右糸i構上完个相同,不同的只足哪止匕力法角被呼叫以及如何仃収所衆rm勺们。iii於a類似r所以辽裨不需要逐必讀卄解釋。現住詁讀卄現仃的iOS裝代I:建比和埶行此應川程式,、怡試試它(見圖17-2)。陥进卄將裝H傾斜不M的力向時,金石到力向感應器的们角隨若力向不同而調整,I佰只耍誼卄穏穏地牛住裝代,該什i也角保持穏疋。圖172:在iPhone4上執行的MotionMonitor。不幸地*如果讀者在模擬器上執行此應用程式時將曾

27、看到一對錯誤訊息。如來誼十仃iPhone4(若將來任何仃陀螺儀的裝讥),角石到辽止匕们如何收變。曲裝讥疋住不呗,不管足哪個力向,陀螺儀的值都角右选附近徘徊。不過齡进者旋轉它|厅,金石到陀螺儀的值如何依據誑卄的旋轉而改變。陥进者停止移動裝代|厅辽個们部角M到冬。主動式動作存取誑??L!經石過住動作發4:.1序如何卅泪1傅送要呼叫Il勺CMMotionManager區魄來仃収動作資料。辽种Nlf件底動的動作處理足夠應付般的Cocoa應川程式,但仃II驱它不人符合應川程式的待疋需求。舉例來說,/動式遊戲通饷j個IM執行的迴圈來處理便川*愉人、史新遊戯狀態和疋給螢恭点你。右加秤悄況卜,lIlJHW動的

28、力式就不怎麼適合,因為誼十需要公實件-個等待動作卅件的物件、收到感應器最近的位代時丿川以記錄尿華備右沛耍冊將該資料I川報給匸要的遊戯迴圈。好CMMotionManager仃個内建的解決力条。現右不川將辿塊傅人*只耍使川startAccelerometerUpdates|startGytoUpdates-丿j法云行訴區塊I改川感應器,之後任何II&冏想要的話,只要Y接從動作代理程式讀収数们就好了。讓我們使川此力式來改變我們的MotionMonitor應川程式,以讓誼卄町以石石它足如何辿作。I川始詁先製竹鈕卄MotionMonitor占条資料夾的復木。接井增丿川個新的l;f例變數和比對(match

29、ing)圈件到MotionMonitorViewController.h和個扌刊勺NSTimer的描櫟,此NSTimer將角觸發我們所仃做小的更新:#import#importinterfaceMotionMonitorViewController:UlViewControllerCMMotionManager*motionManager;UILabel*accelerometerLabel;UILabel*gyroscopeLabel;NSTimer*updateTimer;property(retain)CMMotionManager*motionManager;property(reta

30、in)IBOutletUILabel*accelerometerLabel;579陀螺儀和方向感應器property(retain)property(retain)IBOutletUILabel*gyroscopeLabel;NSTimer*updateTimer;end現右命切換到MotionMonitorViewController.m誑卄窗要右九利洽成此新圈忤dealloc中釋放它:implementationMotionMonitorViev/ControllersynthesizemotionManager;synthesizeaccelerometerLabel;synthesiz

31、egyroscopeLabel;synthesizeupdateTimer;一(void)deallocmotionManagerrelease;accelerometerLabelrelease;gyroscopeLabelrelease;updateTimerrelease;superdealloc;刪除我們之1询仃的整個viewDidLoad力法,、怡以底Z咬簡甲的版木來収代,此版木只足設说此励作年沖I!程式竝提供資訊性的櫟錢給欠缺感應器的裝汽:-(void)viewDidLoadsuperviewDidLoad;selfmotionManager=CMMotionManagerallo

32、cinitautorelease;if(motionManageraccelerometerAvailable)motionManageraccelerometerUpdatelnterval=10/10.0;motionManagerstartAccelerometerUpdates;elseaccelerometerLabe1.text=nThisdevicehasnoaccelerometer”;if(motionManagergyroAvailable)motionManagergyroUpdateInterval=1.0/10.0;motionManagerstartGyroUpda

33、tes;elsegyroscopeLabel.text=nThisdevicehasnogyroscope;JixllljIi*我們臼使丿IJviewDidLoad和viewDidUnload將仃關GUI穎小之圈竹:.的ill芒興摧毀力II上括號。不逊力我們新計II寺器的帖形中,我們想要它只住史小的峙冏視窗內敢川,也就足實際穎小該檢視峙。以辽秤力式我們讨以將匸要遊戲迴圈的使川:#維持任放小。我們Jill像底F樣地l;f作viewWillAppear:和viewDidDisappear:來完成此强。詁:將辽個力法增力II至!1viewDidLoad後:-(void)viewWillAppear:

34、(BOOL)animatedsuperviewWillAppear:animated;self.updateTimer=NSTimerscheduledTimerWithTimelnterval:1.0/10.0targeselector:selector(updateDisplay)userinfo:nilrepeats:YES;-(void)viewDidDisappear:(BOOL)animatedsuperviewDidDisappear:animated;selfupdateTimer=nil;viewWillAppear:ip的程式碼角建M個新的計峙器,怡排足它1/10秒就啟動次

35、川乎叫updateDisplay丿j法,“!过個力法我們泌沒红“。詁將此力法增力II到viewDidDisappear底卜:-(void)updateDisplayif(motionManageraccelerometerAvailable)CMAccelerometerData*accelerometerData=motionManager.aucelerometerData;accelerometerLabel.text=NSStringstringWithFormat:nAccelerometernnx:%+2fny:%+2fnz:%+2f,accelerometerDataaccele

36、rationx,accelerometerDataaccelerationy,accelerometerDataaccelerationz;if(motionManagergyroAvailable)CMGyroData*gyroData=motionManagergyroData;gyroscopeLabel.text=NSStringstringWithrormat:nGyroscopennx:%+.2fny:%+2fnz:%+2fn,gyroDatarotationRatex,gyroDatarotationRatey,gyroDatarotationRatez;詁右鈕卄的裝鬥I:处&、

37、怡執行此應川程式,讀卄應該角石到它的行為和弟版的模樣。現在讀卄乙紳石過収動作資料的力式。詁使川放適合的給誼卄的應川程式。方向感應器的結果我們之1询提過iPhone的力向感應器讨偵測:個恤上的丿川速度,|佰IL它可便川CMAccelerationstruct來捉供此資訊。血個CMAcceleration部仃X、y和Z欄位血何個樨I位部仃放個浮點俏。o的们衣小力向感應器右:該响II上沒仃偵測到移動。山或/的值則衣示右以力向上仃受力。卿例來說,y常以订1衣小感應到向卜的拉力,内此町能代衣足以IT模式乖Il冲井丁:機。y们為匸則衣右州I反的力向上仃件川力,辽町能衣小丁:機足烦倒京或足向卜移動。詁記住圖

38、17-3中的圖衣,血讓我們石卜部分的力向感應器結來。詁汁总,右贞活小,誼十不A对能松彳到辽麼粘確的们,因為力向感應器很獗域,即使-點點動作都誑彳U到,所以讀卄通M在:.個啊I上都乍少讀彳到-J點的丿J。辽足“活m勺物理現象I佰不足諌堂中的物理現象。第二力應川程式中加记見的力向感應器使川力式或訂足做為遊戲的控制器。木说稍後我們將M個使川力向感應器做為愉人的程式,但订先譲我們石切個信見的力向感應器使川:偵測搖乂。581陀螺儀和方向感應器#陀螺儀和方向感應器smss.;.o.iwifs蔓可巨:?s二7sx0.0y-1.0z0.0KIUl.-HINMgad(4QI*he.5znsS.ifi-DQaui

39、圖17-3:不同裝置方向的理想化加速度值仃4偵測搖晃搖晃和丁哆動作樣,也町以當成應川程式的利愉人形式。卿例來說,iOS馳例程式碼占条中的給圖程式GLPaint,它讓使川*对以翔II搖晁iOS裝代的力式來採掉給製的圖形。偵測挤晃的帖丿I幻F沾簡甲,只需婪檢代果個啊I1汕勺絶對们足否人於i没足的|“檻。/|:|?/;J的使川悄況卜,個-hhzZljfW-hli紀錄池逹i.3g的值竝井少見,II耍得到比辽還耍阳|需多的们則通滋需要故急施丿J。力向感應器似乎無法祀錄超過2.3g以上的们(乍少我們的經驗足如此),所以不要將门檻設得比辽還耍离。耍偵測挤晁悄況,誼者对以便川像底Z1勺程式碼來檢査絶對们,人於

40、1.5的為輕微搖见,人於2.0的則汕強丿J搖见:一(void)accelerometer:(UIAccelerometer*)accelerometerdidAccelerate:(UIAcceleration*)accelerationif(fabsf(acceleration.x)2.0I|fabsf(acceleration.y)2.0I|fabsf(accelerationz)20)/DosomethinghereI.述力法可以偵測到任何啊I上任何超過:倍疋丿J的動作。誼*也町以制I要求使川*來剛搖晃d次數後旳Kf此動作紀錄汕搖兄,從ihjl;f作史粘密的搖晃偵測,其程式碼如卜:一(v

41、oid)accelerometer:(UIAccelerometer*)accelerometerdidAccelerate:(UIAcceleration*)accelerationstaticNSIntegershakeCount=0;staticNSDate*shakeStart;NSDate*now=NSDateallocinit;NSDate*checkDate=NSDateallocinitWithTimelnterval:l5fsinceDate:shakestart;if(nowcompare:checkDate=NSOrderedDescending|shakestart=n

42、il)shakeCount=0;shakestartrelease;shakestart=NSDateallocinit;nowrelease;checkDaterelease;if(fabsf(acceleration.x)2.0I|fabsf(acceleration.y)2.0I|fabsf(2.0.z)2.0)shakeCount+;if(shakeCount4)/DosomethingshakeCount=0;shakestartrelease;shakestart=NSDateallocinit;辽個力法角記錄力向感應器刖報们超過2.0的次数,如來住1.5秒I4jpq次以I-它就將

43、其記錄為搖见。建的搖晃偵測接见際上還仃另外利力式,也就足潛藏右中I應程式鏈中的力式。還記得我們在弟丨/K女11何1T作像touchesBegan:withEvent:等力法來偵測觸碰U駡?iOS也提供:個類似的XI應程式力法來偵測動作:;:丫動作開始進行II&,motionBegan:withEvent:Jj法角如第所討論過的先被傅送到第讪應程式然後口應程式鏈上路傅卜2。彳丫動件糸止朿II&,motionEnded:withEvent:力法角被傅送到第Tl應程式如來在搖见期冏,丁:機鈴嚮或發T其他動作1何与敛中斷II:,motionCancelled:withEvent:訊息角傅送到第Tl應程

44、式辽衣示不川仃-接便川CMMotionManager也J以偵測搖晁。锻*只要孩寫檢視或檢視控制器小適當的動作感應力法即町,然後常使川右搖见丁:機1序便角门動呼叫辽止匕力法。除开誑卄口彳、仃需要對搖見的丁:勢仃贝多純的控制力式,不然應該便川辽吐內建好的動作偵測力法,血不要便川木住介紹的丁動力法,不過我們還足角將辽種丁:動力法介紹卜,以防誑*3需要進行史多的控制。現住誑者L1紳封如何偵測搖晃右f川木的概念,我們接井將打壊讀卄的丁:機。搖到壞我們不足“的要搖壊誑者的丁:機,只足耍寫個能夠偵測搖晃的應川程式,然後議誑#|1勺丁:機石血來和聽起來像足被接显搖到壊r。當用攵動辽個應川程式I螢幕Uffi孩角做小如圖17-4所小的iPhonel:.!|fii如來將丁:機川丿J挤见,讀卄町憐的丁:機便會發小像足被搖壊的聲背,1佰11.笛於角出現如圖17-5所小的樣/。為什麼我們要做辽麼邪惡的趴?不川擔心,誑右对粘III俺觸螢幕來將iPhone疋設卜加來沾純的樣貌。585

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!