你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 控制器轉場動畫詳解

控制器轉場動畫詳解

編輯:IOS開發基礎

0.jpg

作者:YouXianMing 授權本站轉載。

效果

1.gif

說明

1. 控制器轉場動畫包括了普通控制器的present與dismiss轉場動畫,還有NavigationController的push與pop轉場動畫.其中,NavigationController的pop動畫包含了回退百分比顯示

2. 對轉場動畫對象進行行為抽象,讓使用更加簡單

3. 即使簡化了使用,控制器轉場動畫也是屬於比較難掌握的

源碼

https://github.com/YouXianMing/ViewControllersTransition

//
//  BaseAnimator.h
//  ViewControllersTransition
//
//  Created by YouXianMing on 15/7/21.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//
#import #import @interface BaseAnimator : NSObject /**
 *  動畫執行時間(默認值為0.5s)
 */
@property (nonatomic) NSTimeInterval  transitionDuration;
/**
 *  == 子類重寫此方法實現動畫效果 ==
 *
 *  動畫事件
 */
- (void)animateTransitionEvent;
/**
 *  == 在animateTransitionEvent使用才有效 ==
 *
 *  源頭控制器
 */
@property (nonatomic, readonly, weak) UIViewController *fromViewController;
/**
 *  == 在animateTransitionEvent使用才有效 ==
 *
 *  目標控制器
 */
@property (nonatomic, readonly, weak) UIViewController *toViewController;
/**
 *  == 在animateTransitionEvent使用才有效 ==
 *
 *  containerView
 */
@property (nonatomic, readonly, weak) UIView           *containerView;
/**
 *  動畫事件結束
 */
- (void)completeTransition;
@end
//
//  BaseAnimator.m
//  ViewControllersTransition
//
//  Created by YouXianMing on 15/7/21.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//
#import "BaseAnimator.h"
@interface BaseAnimator ()
@property (nonatomic, weak) id  transitionContext;
@property (nonatomic, weak) UIViewController  *fromViewController;
@property (nonatomic, weak) UIViewController  *toViewController;
@property (nonatomic, weak) UIView            *containerView;
@end
@implementation BaseAnimator
#pragma mark - 初始化
- (instancetype)init {
    
    self = [super init];
    if (self) {
    
        // 默認參數設置
        [self deafultSet];
    }
    
    return self;
}
- (void)deafultSet {
    
    _transitionDuration = 0.5f;
}
#pragma mark - 動畫代理
- (NSTimeInterval)transitionDuration:(id )transitionContext {
    
    return _transitionDuration;
}
- (void)animateTransition:(id )transitionContext {
    
    self.fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    self.toViewController   = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    self.containerView      = [transitionContext containerView];
    self.transitionContext  = transitionContext;
    
    [self animateTransitionEvent];
}
- (void)animateTransitionEvent {
    
    /* == 代碼示例 ==
     
    UIView *tmpView  = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    [self.containerView addSubview:self.toViewController.view];
    [self.containerView addSubview:tmpView];
    
    [UIView animateWithDuration:self.transitionDuration
                          delay:0.0f
         usingSpringWithDamping:1 initialSpringVelocity:0.f options:0 animations:^{
             
             tmpView.frame = CGRectMake(0, 0, 100, 100);
             
         } completion:^(BOOL finished) {
             
             [tmpView removeFromSuperview];
             [self completeTransition];
         }];
     */
}
#pragma mark -
- (void)completeTransition {
    [self.transitionContext completeTransition:!self.transitionContext.transitionWasCancelled];
}
@end

細節

導航欄控制器動畫需要做的事情(*為添加回退百分比,非必須)

1. 添加協議

blob.png

2. 添加代理

blob.png

3. 實現協議方法

blob.png

* 4. 添加UIPercentDrivenInteractiveTransition對象

blob.png

* 5. 添加邊緣手勢

blob.png

* 6. 實現百分比協議

blob.png

* 7. 實現手勢方法

blob.png

普通控制器動畫需要做的事情

1. 添加協議

blob.png

2. 控制器的簡易配置

blob.png

3. 實現代理協議

blob.png

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved