程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 核心動畫中的動畫組和轉場動畫

核心動畫中的動畫組和轉場動畫

編輯:C++入門知識

所謂的動畫組就是將一些動畫組合起來給layer使其的動畫更豐富靈活。 它很簡單,就是為其animations屬性賦值一個動畫數組。

 
- (void)demoAnimationGroup  
{  
    static NSString * const kCAPostionKeyPath = @"position";  
    static NSString * const kCAOpacityKeyPath = @"opacity";  
    static NSString * const kCARotationKeyPath = @"transform.rotation";  
    static NSString * const kCAScaleKeyPath = @"transform.scale";  
      
    UIBezierPath *path = [UIBezierPath bezierPath];  
    [path moveToPoint:_demoView.layer.position];  
    [path addCurveToPoint:CGPointMake(260, 400) controlPoint1:CGPointMake(0, 460) controlPoint2:CGPointMake(320, 0)];  
      
    //路徑動畫  
    CAKeyframeAnimation *posAnimation = [CAKeyframeAnimation animationWithKeyPath:kCAPostionKeyPath];  
    posAnimation.path = path.CGPath;  
    posAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  
      
    //透明度動畫  
    CABasicAnimation *opaAnimation = [CABasicAnimation animationWithKeyPath:kCAOpacityKeyPath];  
    opaAnimation.duration = 2.0f;  
    opaAnimation.toValue = @(0.3f);  
    opaAnimation.autoreverses = YES;  
      
    //旋轉動畫  
    CABasicAnimation *rotAnimation = [CABasicAnimation animationWithKeyPath:kCARotationKeyPath];  
    rotAnimation.duration = 2.0f;  
    rotAnimation.toValue = @(M_PI);  
    rotAnimation.autoreverses = YES;  
      
    //縮放動畫  
    CABasicAnimation *scaAnmaiton = [CABasicAnimation animationWithKeyPath:kCAScaleKeyPath];  
    scaAnmaiton.duration = 2.0f;  
    scaAnmaiton.toValue = @(1.5f);  
    scaAnmaiton.autoreverses = YES;  
      
    //設置動畫組  
    CAAnimationGroup *group = [CAAnimationGroup animation];  
    group.animations = @[posAnimation, opaAnimation, rotAnimation, scaAnmaiton];  
    group.duration = 4.0f;  
    group.removedOnCompletion = NO;  
    group.fillMode = kCAFillModeForwards;  
      
    [_demoView.layer addAnimation:group forKey:nil];  
}  

 

這個動畫組對demoView的layer加入了一些同時進行的動畫,比如雙控制點的貝塞爾路徑,透明度的漸隱漸明,旋轉以及縮放等。     CATransition   轉場動畫幾乎在所有的APP上都能遇見,經常用於視圖控制器的切換或者單視圖控制器的頁面切換等,也可以在自定義UIStoryboardSegue中來加入動畫效果。   它也是CAAnimation的子類,能為圖層提供移出屏幕和移入的動畫效果。 其常用屬性為   type 過渡類型 subtype 過渡類型的子類型,方向設置   其中過渡類型有很多,最初有四個版本,後來又加入了一些,以字符串形式設置。   最初的四個:fade,push,moveIn,reveal 以後加入的效果則更加豐富和炫目,有 cube, oglFlip, suckEffect, rippleEffect, pageCurl, pageUnCurl, cameraIrisHollowOpen, cameraIrisHollowClose。    
- (void)viewTransition  
{  
    static NSString * const kCATransitionTypeFlip = @"oglFlip";     //翻頁效果  
      
    CATransition *transition = [CATransition animation];  
    transition.type = kCATransitionTypeFlip;  
    transition.subtype = kCATransitionFromRight;  
    transition.duration = 1.5f;  
    [_transitionOrangeView.layer addAnimation:transition forKey:nil];  
      
    [self.view performSelector:@selector(sendSubviewToBack:) withObject:_transitionOrangeView afterDelay:1.0f];  
}  

 

  這個方法簡單的實現了view翻頁的效果,當然目前控制器的根view只有一個subview,所以使用sendSubviewToBack的方法後顯示的還是這個view,但是看到了動畫效果。   現在UIView的轉場動畫有了更方便的類方法 + transitionWithView:duration:options:animations:completion: + transitonFromView:toView:duration:options:completion:   這兩個方法參數加入了蘋果推薦的塊代碼,也讓轉場動畫都在一個方法中進行處理,也對動畫結束進行了處理,更加方便易用。    
- (void)anotherTransition  
{  
    _transitionBlueView = [[UIView alloc] initWithFrame:self.view.bounds];  
    _transitionBlueView.backgroundColor = [UIColor blueColor];  
      
    [UIView transitionFromView:_transitionOrangeView  
                        toView:_transitionBlueView  
                      duration:1.0f  
                       options:UIViewAnimationOptionTransitionCrossDissolve     
                    completion:nil];  
}  

 

代碼很簡潔和易讀。 不過要注意的一點是,這裡的參數並不是很多,而且我並沒有對藍色視圖通過addSubview加載到self.view中,也沒有對橘色視圖進行removeFromSuperview,這些方法都封裝在這個類方法中隱式進行了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved