4

我想实现 IOS 天气 APP,如转换,ListView,点击列表项它扩展为详细视图,或者捏到列表也扩展为详细视图。

左右滑动过渡。请让我知道如何实施。

提前致谢。

4

2 回答 2

7

这是我发现的博客上的一些帖子,它解释了 iOS 7 上的 Apple 新转换 API,请仔细阅读并阅读。


简而言之,这是步骤

1 - 在控制器上设置转换委托

您可能需要自定义 3 种类型的过渡:

  • UINavigationController推送和弹出转换
  • UItabBarController选项卡更改的过渡
  • 任何模态演示presentViewController:animated

这 3 种情况中的每一种都提供了自己的“过渡委托”协议:

  • UINavigationControllerDelegate
  • UITabBarControllerDelegate
  • UIViewControllerTransitioningDelegate

当您从代码中的某个位置使用演示方法时:

  • pushViewController:animated:或者popViewControllerAnimated:
  • setViewControllers:animated:
  • presentViewController:animated

然后,如果需要动画,这些代表会询问我所谓的“动画师”。

我所说的“动画师”是一个符合协议的对象<UIViewControllerAnimatedTransitioning>(或者<UIViewControllerInteractiveTransitioning>在交互式过渡的情况下,如手势驱动的交互)。这将动画与您的UIViewControllers(其中可能已经有大量代码)分离

2 - 写“动画师”

这是负责动画过渡的对象。这可以是一个 viewController,也可以是一个全新的 NSObject。

对于 UINavigationController,您可以为推送和弹出操作定义不同的动画师。

3 - 将动画所需的属性添加到动画师中,并对动画进行编码

“动画师”可能会实现不同的协议,具体取决于您尝试自定义的过渡。在非交互式动画的情况下,这些是方法:

  • - (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext: 定义动画的持续时间

  • - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext这就是牛肉的去处。请参阅上面链接中的示例代码,

  • - (void)animationEnded:(BOOL)transitionCompleted播放动画后的任何清理。


在您的情况下,您可能希望UIView在动画师类中添加一些“原点”和“目标”属性(当然是弱属性!)

然后,当您检测到用户点击了“哪个”视图时。(在您的UITableVIewDelegateUICollectionViewDelegatedidSelect 方法中),您告诉您的动画师,以便它可以使用特定帧进行动画处理,然后根据您的导航逻辑调用 'push'、'pop' 或 'presentViewController' 。

于 2013-10-01T17:41:58.740 回答
0

您绝对可以使用过渡 API 来实现这一目标。

看看这个项目,我认为它会有所帮助:

https://github.com/chefnobody/Colors

我可以使用 Ash Furrow @ Teehan + Lax 的这个例子来做到这一点:http ://www.teehanlax.com/blog/custom-uiviewcontroller-transitions/进行了一些修改:

要扩充此示例以获取捏合/拉动表格视图单元格分离动画,您需要识别已选择的表格视图单元格(或相对于捏合手势“选择”),然后在-animateTransition:您为上面的实际表格视图单元格设置动画并在所选单元格下方,显示您的详细信息视图控制器。请记住,还要从您需要的详细信息(在“弹出”期间)知道将选择哪个单元格(将其滚动回视图)如果它还没有在视图中)然后将其周围的单元格从屏幕外动画化,回到视图中。

至于不同城市之间的滑动交互,您将实现不同InteractionController的处理那里的转换。同样,您可能可以按照 Furrow 的示例并弄清楚如何实现它。

于 2014-03-30T15:22:39.637 回答