iOS 7 UINavigationController 推送动画阴影

Posted

技术标签:

【中文标题】iOS 7 UINavigationController 推送动画阴影【英文标题】:iOS 7 UINavigationController Push animation shadow 【发布时间】:2013-12-17 15:01:31 【问题描述】:

ios 7 中创建了一个新的推送动画,它将推送的视图控制器滑动到层次结构的顶部。但是当动画发生时,iOS 显然做了两件事来修改顶视图控制器的设计:

添加了阴影:

在底部视图控制器上覆盖一层灯光:

在大多数应用程序中,这不是问题。但是,我目前正在开发一个像素完美设计的应用程序,并且我使用具有清晰背景的视图控制器。但是这个功能保持不变,并且光覆盖出现在视图控制器上。因为背景是白色渐变,这个光叠加(在屏幕截图 2 上)非常明显,当动画完成时,它会在没有动画的情况下被移除,这使得它非常引人注目和烦人。

我知道我可以创建自定义动画和过渡,但我想知道:

有什么方法可以移除(或修改)这种光叠加和阴影,而无需创建自定义过渡?

感谢您的帮助。

【问题讨论】:

你解决了吗? 并非没有大量修改。 您是否尝试过使用 iOS 7 的自定义视图控制器转换 API? objc.io/issue-5/view-controller-transitions.html 自定义转换是在考虑此类情况的情况下进行的,因此要求一个不是正确解决方案的解决方案有点毫无意义。 【参考方案1】:

这不是最优雅的解决方案,但我看到人们使用UIImage 动画来展示他们想要展示的内容。所以,你可以:

截屏传入UIViewController 动画UIImageView的到来 致电pushViewController:animated:,将NO 传递给animated: 删除UIImageView

同样,有点小技巧,但也许它是您的场景的最佳解决方案。

【讨论】:

【参考方案2】:

试试这个代理

[[UIImageView appearanceWhenContainedIn:NSClassFromString(@"_UIParallaxDimmingView"), nil] setAlpha:0.0f];

我不知道 Apple 是否允许这样做,因为它使用私有 API。应用提交时会更新。

【讨论】:

此解决方案仅适用于导航控制器层次结构中没有任何其他图像视图的情况......所以,不是超级有用。 @patr1ck 您可以继承 UIImageView 并在任何需要的地方使用您的子类。然后,您可以只将此代理指定给不适用于您的子类的 Apple 的 UIImageView。 这获得批准了吗?

以上是关于iOS 7 UINavigationController 推送动画阴影的主要内容,如果未能解决你的问题,请参考以下文章

功能差异,UINavigationController vs Only Storyboard Segue

在 UINavigationController 中设置自定义导航栏类

在 UINavigationController 中设置自定义导航栏类

在 Swift 2.0 中设置 UINavigationController 栏标题

UINavigationController -> UIViewController -> UIView -> UITableViewController?

用动画隐藏导航控制器和标签栏控制器