iOS--ViewController转场

前言

看到seedante的转场文章iOS 视图控制器转场详解,有兴趣就跟着学习咯.

转场协议

// UIViewControllerTransitioning.h
// 1. 转场代理(required),提供动画控制器与交互控制器
@protocol UIViewControllerTransitioningDelegate <NSObject>
// 2. 转场上下文(required),提供转场过程中视图控制器等相关的属性
@protocol UIViewControllerContextTransitioning <NSObject>
// 3. 动画控制器(required),执行动画
@protocol UIViewControllerAnimatedTransitioning <NSObject>
// 4. 交互(optional),控制交互
@protocol UIViewControllerInteractiveTransitioning <NSObject> 
//  UIViewControllerTransitionCoordinator.h
// 5. 转场协调(optional),协调转场动画与其它动画,可让两者并行执行
@protocol UIViewControllerTransitionCoordinator <UIViewControllerTransitionCoordinatorContext>

转场代理

转场代理里动画控制器与交互控制器可选实现。 没有实现或者返回nil则使用默认的转场效果。

@protocol UIViewControllerTransitioningDelegate <NSObject>

@optional
- (nullable id <UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source;

- (nullable id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed;

- (nullable id <UIViewControllerInteractiveTransitioning>)interactionControllerForPresentation:(id <UIViewControllerAnimatedTransitioning>)animator;

- (nullable id <UIViewControllerInteractiveTransitioning>)interactionControllerForDismissal:(id <UIViewControllerAnimatedTransitioning>)animator;

- (nullable UIPresentationController *)presentationControllerForPresentedViewController:(UIViewController *)presented presentingViewController:(UIViewController *)presenting sourceViewController:(UIViewController *)source NS_AVAILABLE_IOS(8_0);

@end

转场上下文

该协议中蛮多方法的。

@protocol UIViewControllerContextTransitioning <NSObject>
- (nullable UIView *)containerView;
- (BOOL)isAnimated;
- (BOOL)isInteractive; // This indicates whether the transition is currently interactive.

- (BOOL)transitionWasCancelled;

- (UIModalPresentationStyle)presentationStyle;

- (void)updateInteractiveTransition:(CGFloat)percentComplete;
- (void)finishInteractiveTransition;
- (void)cancelInteractiveTransition;

- (void)completeTransition:(BOOL)didComplete;

- (nullable __kindof UIViewController *)viewControllerForKey:(NSString *)key;

- (nullable __kindof UIView *)viewForKey:(NSString *)key NS_AVAILABLE_IOS(8_0);

- (CGAffineTransform)targetTransform NS_AVAILABLE_IOS(8_0);

- (CGRect)initialFrameForViewController:(UIViewController *)vc;
- (CGRect)finalFrameForViewController:(UIViewController *)vc;
@end

动画控制器

@protocol UIViewControllerAnimatedTransitioning <NSObject>

- (NSTimeInterval)transitionDuration:(nullable id <UIViewControllerContextTransitioning>)transitionContext;
- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext;

@optional
// This is a convenience and if implemented will be invoked by the system when the transition context's completeTransition: method is invoked.
- (void)animationEnded:(BOOL) transitionCompleted;

@end

交互控制器

@protocol UIViewControllerInteractiveTransitioning <NSObject>
- (void)startInteractiveTransition:(id <UIViewControllerContextTransitioning>)transitionContext;

@optional
- (CGFloat)completionSpeed;
- (UIViewAnimationCurve)completionCurve;

@end

参考资料

iOS 视图控制器转场详解
自定义 ViewController 容器转场

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值