2010年9月25日 星期六

[iOS programing] 在你的程式中加入動畫, Adding Animations to your iOS application

經過一番努力,在繁忙的上班時間中偷閒學習和撰寫程式碼,第一個成品終於要出來了,今天我想在這裡分享如何操作動畫。

其實要在iOS中加入動畫是很簡單的一件事,首先我們得先宣告開始一個動畫區段,值得注意的是beginAnimations是個instance method,別把它誤送給你的物件啦。而它的引數是animationID和一個(void)型別的物件,我建議最好為你的每一個動畫事件取一個animationID,因為當你畫面中同時有很多動畫在發生的時候,也許你想在某一個動畫事件停止的時候作些特殊的處理,這時候它就可以派上用場了,當然你也可以用contex來作到相同的效果。

+ (void)beginAnimations:(NSString *)animationID context:(void *)context

example:
int apple_index = 10;
[UIView beginAnimations: [NSString stringWithFormat:@"Drop_Apple_%d", apple_index] context:nil];


接下來,我們只要指定物件最後的狀態,iphone就會把中間的動畫效果加上來

(物體原始狀態) -----------> (動畫效果) ---------> (物體最後狀態)

舉例,我想要在1.5秒內把一個view(比方說一顆蘋果),從它原來的位置移到別一個地方,就只要寫這二行,很簡單吧。

[UIView setAnimationDuration:(NSTimeInterval) 1.5];
_current_view.frame = end_pos;


然後送commitAnimations這個message到UIView就可以看到你的動畫效果了。

[UIView commitAnimations];


不過如果就只有這樣,那就太簡單啦,通常我們作一個動畫,一定會希望動畫完成後會發生某件事,比方說衣服脫下來後手就...(再次提醒,有18X內容要上apple store不容易),這時候我們就需要設定當動畫完成後,要送一個message到指定的實體,讓它幫你完成接下來的事情,也就是使用到design pattern中的delegation啦,請在你的動畫區間中加入這二行(這裡只是舉例,請隨著你的程式稍作修改。

[UIView beginAnimations: [NSString stringWithFormat:@"Drop_Apple_%d", apple_index] context:nil];
.........
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
.........
[UIView commitAnimations];

這樣一來,當動畫結束的時候,就會丟一個message到你指定的delegate對象,而訊息是animationDidStop,引數是(NSString*) animationID,(NSNumber *) finished和(void*) context。

- (void)animationDidStop:(NSString*)animationID finished:(NSNumber *)finished context:(void *)context {

if ([animationID isEqualToString: @"衣服掉下來"])
{
[player be_a_man];
}
}

這裡是個範例影片,用我鳥鳥的數位相機拍的,有人知道MAC上不錯的擷取影像軟體嗎@@"

2010年9月12日 星期日

[iPhone] 新的iOS 4.1終於支援AVRCP

iPhone和iPod雖然有支援A2DP但不支援AVRCP一直讓人很困擾(蘋果眾:I don't care...),先說明什麼是A2DP跟AVRCP,A2DP是Advanced Audio Distribution Profile,作用是把傳送高音質到你的耳機上,讓你用藍芽耳機聽歌的時候不會像在聽廣播,AVRCP是Audio / Video Remote Control Profile,讓你的藍牙耳機可以控制你的手機,那不支援AVRCP意謂著,雖然你使用了藍芽耳機聽音樂,享受無線的快感,但如果要換首或暫停,你就得拿出你閃亮的iphone,對著它的螢幕戳來戳去(感覺像是夾不死陰謀…)。

這次iOS的昇級,支援AVRCP這個功能就埋沒在各項重大更新中,連官方網頁上都看不到,不過對於想要享受無線快感的人這真的是個好消息,所以我就"立馬"跑去買了備受好評的SonyEricsson MW600來搭配它,結果上一首下一首,語音控制等等都是OKAY,所以有需要的人可以入手啦


大家好好合作哦