动画UINavigationController的"后退"按钮

Cal*_*vin 2 iphone objective-c uiview popviewcontroller

我在导航控制器的层次结构中的视图控制器上有一个自定义按钮,按下后会弹出可见的视图控制器.

我想使用UIView的transform属性为视图控制器的关闭设置动画.它可以工作,但如果我使用`popViewControllerAnimated:YES',动画的默认左侧幻灯片仍然存在,尽管我的自定义转换也可以.

如果我设置popViewControllerAnimated:NO它根本不动画任何东西.

我也研究了CATransitionpopViewControllerAnimated设置时使用哪种方法NO,但是没有"缩放"效果是公共API的一部分,我不想使用私有效果.自定义过滤器也不适用于iPhone,仅适用于OS X.

所以我想我的问题是:

1)有没有办法在默认转换中删除左侧幻灯片但仍然使用自定义动画transform

2)使用自定义过滤器的一些方法CATransition

3)如果我使用私有API进行缩放效果,Apple会在拒收箱中丢弃我的应用程序的可能性有多大?

有没有人有我忽视的解决方案?

Ron*_*bro 6

我已经做了类似于你描述的事情,即在UINavigationController中更改pop和push视图的默认动画.

我们的想法是禁用对象的默认动画并将其替换为您自己的动画.我为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];
   }
Run Code Online (Sandbox Code Playgroud)

使用只需使用代码

   [self.navigationController altAnimatePopViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

为了做推,只需创建另一个类似的功能并反转动画.

它不完美,但它的工作原理.当您选择不同的动画类型时,可以使用组成导航栏/控制器的不同子视图来完善它.

拿了我的白色来提出这个,所以明智地使用它:)

*******编辑

尝试用此替换推送转换(我自己没试过):

  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];
Run Code Online (Sandbox Code Playgroud)

这将进行弹出,即在结算到正确尺寸之前视图将更大.使用数组中的值来控制动画的曲线.