我試圖使用CATransition
從一側進行推動畫。我在處理兩個UIViews
的方法中執行此操作,一個用於背景,另一個用於前景。動畫UIView
是前景。但我不希望新內容替換舊內容,因此要將所有舊內容從前景移到後臺UIView
預計它只會從一側對UIView
的推送過渡進行動畫製作,但取而代之的是舊的UIView
。有沒有辦法做我想做的事情,比如鎖定UIViews
從前景和背景UIViews
擁有正確內容的那一刻起的狀態?從當前狀態爲UIView創建CATransition
我的代碼是這樣的:
UIView *newView = argView; // argView is the view passed as a parameter to the method
// move views from foreground to background
for (UIView *v in [fgView subviews]) {
[v removeFromSuperview];
[bgView addSubview:v];
}
// Slide animation
CATransition *transition = [CATransition animation];
transition.duration = 0.5;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromLeft;
[fgView.layer addAnimation:transition forKey:nil];
[fgView addSubview:newView];
[編輯]我一直在做一些研究。顯然(或者我認爲可能發生的事情)是背景的UIViews刪除採用隱式動畫。有沒有辦法阻止它從動畫?
[編輯]答:是的,這是可以做到(禁用隱動畫),它是用下面的代碼
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
for (UIView *v in [fgView subviews]) {
[v removeFromSuperview];
[bgView addSubview:v];
}
[CATransaction commit];
做的這是我做的,它應該工作(根據蘋果的開發者門戶),但事實並非如此,所以問題仍然存在。
[編輯]大量的測試和閱讀的我發現這個問題是在這之後,當我從它的父刪除視圖的轉換或動畫不承認這種變化,直到後來,所以響應過時的最新變化。有沒有辦法強制更新或檢查removeFromSuperview
或addSubview
何時完成?
[編輯]我需要的究竟是這樣的: 1)UIViews的當前狀態爲:bgView與陰影的UIView或midView(這種觀點不應該被動畫)背後舊觀點。從不動畫的midView。帶有當前UIView的fgView。 2)我想將fgView的內容移動到bgView(它不會動畫化),併爲添加到fgView的新UIView(使用幻燈片,淡入/淡出或翻轉動畫)的外觀設置動畫效果。
好像什麼,我想在這裏做的是無法實現的。嗯......誰會說? – jglievano
你有沒有嘗試 - [UIView setNeedsDisplay]強制更新你的removeFromSuperview/addSubview調用? – Sam
不幸的是,我不清楚你到底在做什麼。是否在兩個不同的視圖中使用相同的UI元素? UIView只能是一個UIView的子項。另外,爲什麼你需要爲此使用CATransition?使用UIView類方法來轉換視圖通常更容易。 – Sam