1
我對iOS動畫並沒有太多的瞭解。我試圖實現的是一個簡單的消息視圖,從屏幕底部垂直滑動到給定的y,然後在幾秒鐘之後UIView會以垂直方式回滾到屏幕外。UIView動畫停止時UIView將會消失
[UIView animateWithDuration:0.5f
animations:^{
self.messageView.frame=CGRectMake(x, y -80, width, height);
}
completion:^(BOOL finished){
if (finished) {
[UIView animateWithDuration:0.5f delay:2.0f options:UIViewAnimationOptionCurveLinear
animations:^{
self.messageView.frame=CGRectMake(x, y + 80, width, height);
}
completion:^(BOOL finished){
// do something...
}
];
}
} ];
這是工作正常,但我在使用中的iOS UITabBar應用這種機制的一個問題:當我改變選項卡,將停止動畫,我可以INFACT看到,「已完成」完成是「假的」。因此第二個塊不被調用,並且消息視圖保持打開狀態。
這裏有幾個問題:
- 我首先關心的是要了解,如果我寫的代碼是正確的,對於嵌套的動畫。
- 我可以通過忽略'finished'和執行代碼來解決,但我不覺得這是一個好主意,在最後一個完成塊內,我已經放了一些編程邏輯,基本上我正在恢復一些UIButtons狀態,以及其他一些小UI的變化。在這一點上,我不知道這是不是一個好主意,但似乎沒有,但如何讓UI知道消息視圖已經消失。當涉及快速響應的UI更改時,NSNotification和KVO似乎是一個糟糕的主意。
我的建議是創建SimpleMessageViewDelegate協議,其具有 - (無效)messageFinished(或類似的東西),其被稱爲在消息呈現結束時恢復UI方法。 你也可以在messageFinished的末尾設置要執行的塊,從而跳過協議,並在視圖中呈現消息的不需要的方法。 – 2013-04-24 08:54:22