gpt4 book ai didi

iphone - 动画导航 Controller 'back' 按钮

转载 作者:行者123 更新时间:2023-12-03 20:29:19 25 4
gpt4 key购买 nike

我在导航 Controller 的层次结构中的 View Controller 上有一个自定义按钮,按下该按钮时,会弹出可见的 View Controller 。

我想使用 UIView 的 transform 属性来设置 View Controller 关闭的动画。它有效,但如果我使用“popViewControllerAnimated:YES”,动画的默认左幻灯片仍然存在,尽管我的自定义转换也有效。

如果我设置popViewControllerAnimated:NO,它根本不会为任何内容设置动画。

我还研究了使用CATransition,当我将popViewControllerAnimated设置为NO时,它可以工作,但没有“缩放”效果这是公共(public) API 的一部分,我不想使用私有(private)效果。自定义滤镜也不适用于 iPhone,仅适用于 OS X。

所以我想我的问题是:

1) 有没有办法删除默认过渡中的左侧幻灯片,但仍然使用 transform 保留自定义动画?

2) 可以通过某种方式对CATransition使用自定义过滤器吗?

3) 如果我使用私有(private) API 来实现缩放效果,Apple 将我的应用程序扔进拒绝箱的可能性有多大?

有人有我忽略的解决方案吗?

最佳答案

我已经完成了与您描述的类似的操作,即更改 UINavigationController 中 View 的弹出和推送的默认动画。

这个想法是禁用对象的默认动画并将其替换为您自己的动画。我为 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];

为了进行推送,只需创建另一个类似的函数并反转动画。

它并不完美,但它有效。当您选择不同的动画类型时,请使用组成导航栏/ Controller 的不同 subview 以使其完美。

我花了相当多的时间才想出这个,所以明智地使用它:)

*****编辑

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

  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];

这会弹出,即 View 在达到正确尺寸之前会变大。使用数组中的值来控制动画的曲线。

关于iphone - 动画导航 Controller 'back' 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3332383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com