簡體   English   中英

動畫UINavigationController的“后退”按鈕

[英]Animating UINavigationController's 'back' button

我在導航控制器的層次結構中的視圖控制器上有一個自定義按鈕,按下該按鈕會彈出可見的視圖控制器。

我想使用UIView的transform屬性來動畫化視圖控制器的關閉。 它可以工作,但是如果我使用“ popViewControllerAnimated:YES”,動畫的默認左幻燈片仍然存在,盡管我的自定義轉換也可以工作。

如果我將popViewControllerAnimated:NO設置為完全沒有動畫。

我還研究了使用CATransition ,當我將popViewControllerAnimated設置為NO ,但是公共API中沒有“縮放”效果,因此我不想使用私有效果。 自定義過濾器也不適用於iPhone,僅適用於OSX。

所以我想我的問題是:

1)有沒有一種方法可以刪除默認過渡中的左側幻燈片,但仍然可以使用transform獲得自定義動畫?

2)對CATransition使用自定義過濾器的CATransition

3)如果我使用私有API來實現縮放效果,Apple將我的應用扔到拒絕箱中的可能性有多大?

有人有我忽略的解決方案嗎?

我已經完成了與您描述的類似的操作,即在UINavigationController中更改彈出和推送視圖的默認動畫。

這個想法是禁用對象的默認動畫並將其替換為您自己的動畫。 我為UINavigationController創建了一個新類別,並使用了類似於以下功能的函數。

 - (void) altAnimatePopViewControllerAnimated:(BOOL)animated
 {
[CATransaction begin];

CATransition *transition;
transition = [CATransition animation];
transition.type = kCATransitionPush;          // Use any animation type and subtype you like
transition.subtype = kCATransitionFromTop;
transition.duration = 0.3;

CATransition *fadeTrans = [CATransition animation];
fadeTrans.type = kCATransitionFade;
fadeTrans.duration = 0.3;


[CATransaction setValue:(id)kCFBooleanTrue
                 forKey:kCATransactionDisableActions];

[[[[self.view subviews] objectAtIndex:0] layer] addAnimation:transition forKey:nil];
[[[[self.view subviews] objectAtIndex:1] layer] addAnimation:fadeTrans forKey:nil];



[self  popViewControllerAnimated:YES];
[CATransaction commit];
   }

使用只需使用代碼

   [self.navigationController altAnimatePopViewControllerAnimated:YES];

為了進行推送,只需創建另一個類似的功能並反轉動畫即可。

這不是完美的,但可以。 當您選擇不同的動畫類型時,請在構成導航欄/控制器的不同子視圖中播放以使其完美。

花了我一個漂亮的白人來提出這個,所以明智地使用它:)

*******編輯

嘗試用此替換推送轉換(自己不要嘗試):

  CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
  scale.duration = duration;
  scale.values = [NSArray arrayWithObjects:[NSNumber numberWithFloat:.5f],
              [NSNumber numberWithFloat:1.2f],
              [NSNumber numberWithFloat:.85f],
              [NSNumber numberWithFloat:1.f],
              nil];

這將彈出,即視圖將變大,然后再穩定到正確的大小。 播放數組中的值以控制動畫的曲線。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM