我想实现 IOS 天气 APP,如转换,ListView,点击列表项它扩展为详细视图,或者捏到列表也扩展为详细视图。
左右滑动过渡。请让我知道如何实施。
提前致谢。
这是我发现的博客上的一些帖子,它解释了 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
在动画师类中添加一些“原点”和“目标”属性(当然是弱属性!)
然后,当您检测到用户点击了“哪个”视图时。(在您的UITableVIewDelegate
或UICollectionViewDelegate
didSelect 方法中),您告诉您的动画师,以便它可以使用特定帧进行动画处理,然后根据您的导航逻辑调用 'push'、'pop' 或 'presentViewController' 。
您绝对可以使用过渡 API 来实现这一目标。
看看这个项目,我认为它会有所帮助:
https://github.com/chefnobody/Colors
我可以使用 Ash Furrow @ Teehan + Lax 的这个例子来做到这一点:http ://www.teehanlax.com/blog/custom-uiviewcontroller-transitions/进行了一些修改:
要扩充此示例以获取捏合/拉动表格视图单元格分离动画,您需要识别已选择的表格视图单元格(或相对于捏合手势“选择”),然后在-animateTransition:
您为上面的实际表格视图单元格设置动画并在所选单元格下方,显示您的详细信息视图控制器。请记住,还要从您需要的详细信息(在“弹出”期间)知道将选择哪个单元格(将其滚动回视图)如果它还没有在视图中)然后将其周围的单元格从屏幕外动画化,回到视图中。
至于不同城市之间的滑动交互,您将实现不同InteractionController
的处理那里的转换。同样,您可能可以按照 Furrow 的示例并弄清楚如何实现它。