STPTransitions 0.0.4

STPTransitions 0.0.4

测试测试
Lang语言 Obj-CObjective C
许可 MIT
Released最新版本2015年11月

Stepan Hruda 维护。



  • Stepan Hruda

为自定义 iOS 视图控制器转换提供统一、简单的 API。

也许您观看过 2013 WWDC 演讲 或阅读了有关如何使用自定义转换在子视图控制器之间、模态视图控制器以及在导航控制器中的一些稍分散的 文档。在几分钟之后,您已经在 Protocolandia 漫无目的地徘徊。我们并不责怪您。

安装

pod 'STPTransitions' (通过 CocoaPods)

功能 (TL;DR)

  • 子视图控制器转换
  • 模态视图控制器转换(+ 横向修正)
  • 导航控制器转换
  • 统一、简单 API

正在开发中

  • 完整交互式转换支持

使用方法

首先导入库的头文件

#import <STPTransitions.h>

快速入门:STPBlockTransition

使用 STPBlockTransition,您可以快速创建行内转换

STPTransition *snazzyTransition = [STPTransition transitionWithAnimation:
 ^(UIView *fromView,
   UIView *toView, 
   UIView *containerView, 
   void (^executeOnCompletion)(BOOL finished)) {
     // Your fabulous animations go here
}];

注意:您有两个重要的责任

  • fromView containerView 的子视图,toView 不是。在适当的时候添加它。
  • 动画完成时执行 executeOnCompletion(在其完成块的最后)。

使用转换:导航控制器

设置时,将 STPTransitionCenter 单例分配为导航控制器的代理

navigationController.delegate = [STPTransitionCenter sharedInstance];

现在只需使用以下代码推送和弹出视图控制器即可

[self.navigationController pushViewController:viewController
                              usingTransition:snazzyTransition];
// and                              
[self.navigationController popViewControllerUsingTransition:transition];

使用转换:子控制器

不需要设置。在父控制器中,使用以下代码在两个子控制器之间切换:

[self transitionFromViewController:oldChildViewController
                  toViewController:newChildViewController
                   usingTransition:snazzyTransition];

注意:这种转换目前无法进行交互。如果您想使用此功能,请在 Issues 中表达您的意见。

使用过渡:模态控制器

要设置,将单例STPTransitionCenter分配给呈现控制器代理

self.transitioningDelegate = [STPTransitionCenter sharedInstance];

现在只需使用以下代码呈现和 dismiss 视图控制器

[self presentViewController:viewController
            usingTransition:snazzyTransition
                 completion:completion];
// and                
[self dismissViewControllerUsingTransition:snazzyTransition
                                completion:(void (^)(void))completion];

正确使用:继承 STPTransition

为了保持视图控制器薄和代码库的合理分离,你可能不会想在视图控制器中保留过渡动画代码。这也允许过渡的可重用性。通过继承STPTransition,你就能实现这两个目标。

请参阅示例项目进行实际代码示例。

反向过渡

当推送或呈现一个视图控制器时,你可以指定当返回操作(即弹出或 dismiss)发生时应使用哪个过渡。为此,只需将过渡对象分配给reverseTransition

这大大帮助了解耦,因为在已推送呈现的控制器中不需要知道它如何被显示。

提示:只需将reverseTransition分配为新创建的类的一个新实例,就像你为推送/present创建的类一样。下面说明了如何在同一个类中轻松处理两种动画。

横向模式的模态过渡

截至 iOS 7.0.2,在横向模式下自定义模态过渡不可用,因为 iOS 给你的视图有许多损坏的框架和转换。STPTransitions试图为你解决这个问题,提供你期望方向的视图。这已经在 iPad 全屏横向自定义模态中进行了测试,并且有效。

同一类中实现常规和反向实现

通常,你不想为同一类型的动画创建两个STPTransition子类,即一个用于前进,一个用于回退。当回退(即弹出或 dismiss 控制器)时,过渡实例会自动分配给isReversedYES

提示:代码重用,在同一类中处理正向和反向过渡。通常这意味着在isReversed上使用if/else条件。

通过手势识别器触发

一个过渡可以被分配一个手势识别器。当识别器检测到手势时,过渡就会自动启动。

注意:《this》并不意味着过度(例如,会跟随用户的指尖)是交互式的,尽管它可以。

交互式过渡

待办:交互式过渡尚不支持。

  1. interactive属性设置为YES
  2. 分配一个gestureRecognizer,它将跟踪进度。
  3. 在你的子类中实现interactiveGesturePercentageCompletionForPoint:

注意:交互式过渡不一定是通过交互触发的,例如,可以通过按钮触发并发生非交互式过渡。《wasTriggeredInteractively属性会告知触发方式。

过渡的包含

如果您希望库默认包含一些可配置的常用转换,请在Issues中发表您的意见。也欢迎贡献。

常见问题解答 (FAQ)

问题:我需要让我的 UINavigationController 有自己的代理。我该做什么?
答案:从 STPTransitionCenter 继承您的代理,并使用您自己的实例而不是默认中心。由于您没有使用单例,因此您负责保持该对象存在。确保在任何由中心实现的代理方法中调用 super


Stepan Hruda 创建。如果您关注他在Twitter上的动态,他会过得很好。

感谢 Josh VickeryShopKeep POS 的贡献和反馈。

MIT 许可证 下发布。