我想实现IOS Weather APP,如转换,ListView,点击列表项,它扩展到详细视图,或者捏到列表也扩展到详细视图。
向左和向右滑动过渡。请让我知道如何实现它。
先谢谢。
答案 0 :(得分:7)
以下是some post on a blog I found解释iOS 7上的Apple新版Transitioning API,仔细阅读,阅读它。
简而言之,这是步骤
1 - 在控制器上设置过渡委托
您可能想要自定义3种类型的转换:
UINavigationController
推送&弹出过渡UItabBarController
标签已更改过渡presentViewController:animated
这3个案例中的每一个都提供了自己的“过渡委托”协议:
UINavigationControllerDelegate
UITabBarControllerDelegate
UIViewControllerTransitioningDelegate
当您从代码中的某个位置使用演示方法时
pushViewController:animated:
或popViewControllerAnimated:
setViewControllers:animated:
presentViewController:animated
然后,如果需要动画,这些代表会询问我称之为'动画师'。
我称之为“动画师”的是符合协议<UIViewControllerAnimatedTransitioning>
的对象(或者在交互式转换的情况下为<UIViewControllerInteractiveTransitioning>
,如手势驱动的交互)。这会将动画与UIViewControllers
(可能已经包含大量代码)
2 - 撰写'animator'
这是负责动画转换的对象。这可以是viewController,也可以是全新的NSObject。
如果是UINavigationController,您可以为推送和弹出操作定义不同的动画师。
3 - 将动画所需的属性添加到动画师中,然后对动画进行编码
'animator'可能会实现不同的协议,具体取决于您尝试自定义的转换。 在非交互式动画的情况下,这些是方法:
- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext
:定义动画的持续时间
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
这就是牛肉的所在。请参阅上面链接中的示例代码
- (void)animationEnded:(BOOL)transitionCompleted
用于播放动画后的任何清理工作。
在您的情况下,您可能希望在动画类中添加一些“原点”和“目标”UIView
属性(当然是弱属性!)
然后,当您检测到用户点击了“哪个”视图时。 (在你的UITableVIewDelegate
或UICollectionViewDelegate
didSelect方法中),你告诉你的动画师它可以用这个特定的帧动画,然后调用'push','pop'或'presentViewController',这取决于你的导航逻辑。
答案 1 :(得分:0)
你绝对可以通过过渡api来解决这个问题。
查看这个项目,我认为这会有所帮助:
https://github.com/chefnobody/Colors
我能够使用Ash Furrow @ Teehan + Lax:http://www.teehanlax.com/blog/custom-uiviewcontroller-transitions/中的这个例子进行一些修改:
要扩充此示例以获取捏拉/拉表视图单元格分离动画,您需要识别所选的表格视图单元格(或者#34;选择&#34;相对于捏合手势&#34;),然后在-animateTransition:
中,您将所选单元格上方和下方的实际表格视图单元格设置为动画,从而显示您的详细信息视图控制器。请记住,还要根据您需要的详细信息(在&#34; pop&#34;中)动画回到表格视图,知道将选择哪个单元格(如果它还没有在视图中,则将其滚动回视图然后从屏幕外动画围绕它的细胞,回到视野中。
对于不同城市之间的滑动互动,您将实现一个不同的InteractionController
来处理那里的过渡。同样,你可以按照Furrow的例子来弄清楚如何把它拉下来。