2012年4月24日 星期二

翻滾吧,紅茶 - 偵測iPhone的晃動


有些時候,我們並不特別需要知道iPhone傾斜的角度,而是單純想偵測使用者是否晃動iPhone,比方像App LINE一樣利用晃動來和鄰近的陌生人交朋友。接下來,彼得潘將繼續以可愛的紅茶做主角,拍攝翻滾吧,紅茶,每當我們晃動iPhone,紅茶的特寫圖片即優雅地旋轉15度角。

(1) 建立Single View Application專案ShakeTest。

(2) 新增連結至紅茶圖片的dogImageView和儲存圖片旋轉角度的rotateDegree。


(3) 開啟ShakeTestViewController成為first responder的能力。



說明:
想要讓ShakeTestViewController能夠偵測到iPhone的晃動,就好像想看到鬼般,必須先啟動某個開關。只要打開陰陽眼,我們就可以看到鬼。不過這實在太危險了,我們還是打開偵測晃動的開關就好。在iOS的國度裡,只有兩種物件遺傳偵測晃動的血液,一個是UIView,一個是UIViewController。但除此之外,還必須成為first responder才能真正偵測到晃動。由於view controller預設將成為first responder的能力封印起來,因此我們得先覆寫canBecomeFirstResponder,回傳YES解除封印。另外在我們的例子裡,由於沒有其它物件和ShakeTestViewController搶,所以它當然而然成為first responder的不二人選,否則在多人競爭的環境,我們還必另針對欲偵測晃動的對象呼叫becomeFirstResponder


(4) 定義晃動發生時觸發的method motionEnded: withEvent:。


說明:
1. -(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event

當晃動發生時,此method將被呼叫。

2. if(motion == UIEventSubtypeMotionShake)

目前當此method被呼叫時,傳入的motion其實一定是UIEventSubtypeMotionShake,不過為了保險起見,我們還是做個比對,確定真的是晃動。

3.  dogImageView.transform =
          CGAffineTransformMakeRotation(2*M_PI*rotateDegree/360);

利用CGAffineTransformMakeRotation將圖片順時針旋轉。rotateDegree為旋轉的角度,在這個例子裡,每晃動一次,我們即旋轉15度。(一圈是360度。)

執行App:


 為了夢想,盡情地翻滾吧,紅茶!

沒有留言:

張貼留言