Cal*_*vin 2 iphone objective-c uiview popviewcontroller
我在导航控制器的层次结构中的视图控制器上有一个自定义按钮,按下后会弹出可见的视图控制器.
我想使用UIView的transform属性为视图控制器的关闭设置动画.它可以工作,但如果我使用`popViewControllerAnimated:YES',动画的默认左侧幻灯片仍然存在,尽管我的自定义转换也可以.
如果我设置popViewControllerAnimated:NO它根本不动画任何东西.
我也研究了CATransition在popViewControllerAnimated设置时使用哪种方法NO,但是没有"缩放"效果是公共API的一部分,我不想使用私有效果.自定义过滤器也不适用于iPhone,仅适用于OS X.
所以我想我的问题是:
1)有没有办法在默认转换中删除左侧幻灯片但仍然使用自定义动画transform?
2)使用自定义过滤器的一些方法CATransition?
3)如果我使用私有API进行缩放效果,Apple会在拒收箱中丢弃我的应用程序的可能性有多大?
有没有人有我忽视的解决方案?
我已经做了类似于你描述的事情,即在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)
这将进行弹出,即在结算到正确尺寸之前视图将更大.使用数组中的值来控制动画的曲线.