CATransition

基本用法
1.初始化
CATransition  *transition = [CATransition animation];
2.設置動畫時長,設置代理人
transition.duration = 1.0f;
transition.delegate = self;
3.設置切換速度效果
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
枚舉值:
kCAMediaTimingFunctionLinear
kCAMediaTimingFunctionEaseIn
kCAMediaTimingFunctionEaseOut
kCAMediaTimingFunctionEaseInEaseOut
kCAMediaTimingFunctionDefault
4.動畫切換風格
transition.type = kCATransitionFade;
枚舉值:
kCATransitionFade = 1,     // 淡入淡出
kCATransitionPush,         // 推進效果
kCATransitionReveal,       // 揭開效果     
kCATransitionMoveIn,       // 慢慢進入并覆蓋效果
5.動畫切換方向
transition.subtype = kCATransitionFromTop;//頂部
枚舉值:
kCATransitionFromRight//右側
kCATransitionFromLeft//左側
kCATransitionFromTop//頂部
kCATransitionFromBottom//底部
6.進行跳轉
[self.navigationController.view.layer addAnimation:transition forKey:nil];
[self.navigationController pushViewController:"你要跳轉的頁面" animated:NO];
跳轉動畫一定設置為NO,不然會兩個效果疊加

注意:addAnimation 添加在何處,誰上,是個難點。

在scrollview滾動視圖上的用法:

    CATransition *animation = [[CATransition alloc] init];
    animation.duration = 1;
    animation.type = @"cube";
    animation.subtype = kCATransitionFromRight;
    [scroll.layer addAnimation:animation forKey:@"ff"];
使用場景二:子控制器view間的轉場動畫。

- (void)transitionFromViewController:(UIViewController * _Nonnull)fromViewController
                    toViewController:(UIViewController * _Nonnull)toViewController
                            duration:(NSTimeInterval)duration
                             options:(UIViewAnimationOptions)options
                          animations:(void (^ _Nullable)(void))animations
                          completion:(void (^ _Nullable)(BOOL finished))completion

實例:
[self transitionFromViewController:_third toViewController:_second duration:1 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
        
    } completion:^(BOOL finished) {
        
    }];
現將third.view 添加到self.view上,等調用這個方法,就會從third.view 有動畫的調到second.view
present轉場動畫 使用兩個協議,重寫view動畫

參考:git
參考:簡書

  • <UIViewControllerTransitioningDelegate>
  • <UIViewControllerAnimatedTransitioning>
// 1. present 方法
presentedVC.transitionDelegate = self;
[self presentViewController:presentedVC animated:YES completion:nil];

//2. <UIViewControllerAnimatedTransitioning>

- (NSTimeInterval)transitionDuration:(nullable id <UIViewControllerContextTransitioning>)transitionContext {
    return 0.5f;
}

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext {
    _transitionContext = transitionContext;
    
    _containerView = [transitionContext containerView];
    
    _from = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    _to = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    
    // iOS8之后才有
    if ([transitionContext respondsToSelector:@selector(viewForKey:)]) {
        _fromView = [transitionContext viewForKey:UITransitionContextFromViewKey];
        _toView = [transitionContext viewForKey:UITransitionContextToViewKey];
    } else {
        _fromView = _from.view;
        _toView = _to.view;
    }

}

//3. < UIViewControllerTransitioningDelegate >

- (nullable id <UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source {
    // 指定的繼承UIViewControllerAnimatedTransitioning協議的對象.
    // 其中的協議方法即指定了轉場動畫.
}

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

push 轉場動畫 使用兩個協議,重寫view動畫

參考:簡書

  • < UINavigationControllerDelegate >
  • <UIViewControllerAnimatedTransitioning>
tabbar 轉場動畫 使用兩個協議,重寫view動畫
  • < UITabBarControllerDelegate >
  • <UIViewControllerAnimatedTransitioning>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容