ios loading視圖動畫(模仿58同城)

最近看了58同城的加載視圖,感受很不錯,以下圖:ios


因此想模仿寫一個,下載58同城的app,解壓,發現它用的是圖片來實現的動畫效果, 並非繪製出來的,因此這就相對簡單些了,其實整個動畫的邏輯不復雜,無非是幾個動畫的組合,而後切換圖片,注意細節處,好比下面的陰影部分也是個動畫, 上面的圖形下來,陰影變大,上去,陰影變小;
xcode

下面直接貼代碼:app

上面圖形的動畫oop

 

[objc] view plain copy
在CODE上查看代碼片派生到個人代碼片
  1. -(void) loadingAnimation:(float)fromValue toValue:(float)toValue timingFunction:(NSString * const)tf  
  2. {  
  3.   
  4.   
  5.     //位置  
  6.     CABasicAnimation *panimation = [CABasicAnimation animation];  
  7.     panimation.keyPath = @"position.y";  
  8.     panimation.fromValue =@(fromValue);  
  9.     panimation.toValue = @(toValue);  
  10.     panimation.duration = ANIMATION_DURATION_SECS;  
  11.       
  12.     panimation.timingFunction = [CAMediaTimingFunction functionWithName:tf];  
  13.       
  14.       
  15.     //旋轉  
  16.     CABasicAnimation *ranimation = [CABasicAnimation animation];  
  17.     ranimation.keyPath = @"transform.rotation";  
  18.     ranimation.fromValue =@(0);  
  19.     ranimation.toValue = @(M_PI_2);  
  20.     ranimation.duration = ANIMATION_DURATION_SECS;  
  21.       
  22.     ranimation.timingFunction = [CAMediaTimingFunction functionWithName:tf];  
  23.       
  24.   
  25.   
  26.     //組合  
  27.     CAAnimationGroup *group = [[CAAnimationGroup alloc] init];  
  28.     group.animations = @[ panimation,ranimation];  
  29.     group.duration = ANIMATION_DURATION_SECS;  
  30.     group.beginTime = 0;  
  31.     group.fillMode=kCAFillModeForwards;  
  32.     group.removedOnCompletion = NO;  
  33.   
  34.   
  35.     [_shapView.layer addAnimation:group forKey:@"basic"];  
  36.       
  37.      
  38.   
  39.   
  40.   
  41. }  

下面是陰影動畫動畫

 

[objc] view plain copy
在CODE上查看代碼片派生到個人代碼片
  1. -(void) scaleAnimation:(float) fromeValue toValue:(float)toValue timingFunction:(NSString * const)tf  
  2. {  
  3.   
  4.     //縮放  
  5.     CABasicAnimation *sanimation = [CABasicAnimation animation];  
  6.     sanimation.keyPath = @"transform.scale";  
  7.     sanimation.fromValue =@(fromeValue);  
  8.     sanimation.toValue = @(toValue);  
  9.     sanimation.duration = ANIMATION_DURATION_SECS;  
  10.       
  11.     sanimation.fillMode = kCAFillModeForwards;  
  12.     sanimation.timingFunction = [CAMediaTimingFunction functionWithName:tf];  
  13.     sanimation.removedOnCompletion = NO;  
  14.       
  15.     [_shadowView.layer addAnimation:sanimation forKey:@"shadow"];  
  16.       
  17.   
  18. }  

而後我是開了個定時器去刷新動畫,固然也有其餘方法spa

 

 

[objc] view plain copy
在CODE上查看代碼片派生到個人代碼片
  1. -(void)animateNextStep  
  2. {  
  3.     switch (_stepNumber)  
  4.     {  
  5.         case 0:  
  6.         {  
  7.               
  8.               
  9.             _shapView.image=[UIImage imageNamed:@"loading_circle"];  
  10.               
  11.               
  12.             [self loadingAnimation:_fromValue toValue:_toValue timingFunction:kCAMediaTimingFunctionEaseIn];  
  13.               
  14.             [self scaleAnimation:_scalefromValue toValue:_scaletoValue timingFunction:kCAMediaTimingFunctionEaseIn];  
  15.               
  16.               
  17.         }  
  18.             break;  
  19.         case 1:  
  20.         {  
  21.               
  22.               
  23.             _shapView.image=[UIImage imageNamed:@"loading_square"];  
  24.               
  25.             [self loadingAnimation:_toValue toValue:_fromValue timingFunction:kCAMediaTimingFunctionEaseOut];  
  26.   
  27.             [self scaleAnimation:_scaletoValue toValue:_scalefromValue timingFunction:kCAMediaTimingFunctionEaseIn];  
  28.   
  29.         }  
  30.             break;  
  31.         case 2:  
  32.         {  
  33.           
  34.           
  35.               
  36.             _shapView.image=[UIImage imageNamed:@"loading_square"];  
  37.   
  38.             [self loadingAnimation:_fromValue toValue:_toValue timingFunction:kCAMediaTimingFunctionEaseIn];  
  39.   
  40.             [self scaleAnimation:_scalefromValue toValue:_scaletoValue timingFunction:kCAMediaTimingFunctionEaseIn];  
  41.   
  42.   
  43.         }  
  44.             break;  
  45.               
  46.         case 3:  
  47.         {  
  48.   
  49.             _shapView.image=[UIImage imageNamed:@"loading_triangle"];  
  50.   
  51.           
  52.             [self loadingAnimation:_toValue toValue:_fromValue timingFunction:kCAMediaTimingFunctionEaseOut];  
  53.   
  54.             [self scaleAnimation:_scaletoValue toValue:_scalefromValue timingFunction:kCAMediaTimingFunctionEaseIn];  
  55.   
  56.               
  57.   
  58.         }  
  59.               
  60.             break;  
  61.               
  62.         case 4:  
  63.         {  
  64.               
  65.             _shapView.image=[UIImage imageNamed:@"loading_triangle"];  
  66.               
  67.             [self loadingAnimation:_fromValue toValue:_toValue timingFunction:kCAMediaTimingFunctionEaseIn];  
  68.   
  69.               
  70.             [self scaleAnimation:_scalefromValue toValue:_scaletoValue timingFunction:kCAMediaTimingFunctionEaseIn];  
  71.   
  72.         }  
  73.               
  74.             break;  
  75.         case 5:  
  76.         {  
  77.               
  78.             _shapView.image=[UIImage imageNamed:@"loading_circle"];  
  79.               
  80.             [self loadingAnimation:_toValue toValue:_fromValue timingFunction:kCAMediaTimingFunctionEaseOut];  
  81.               
  82.             [self scaleAnimation:_scaletoValue toValue:_scalefromValue timingFunction:kCAMediaTimingFunctionEaseIn];  
  83.   
  84.               
  85.             _stepNumber = -1;  
  86.               
  87.         }  
  88.               
  89.             break;  
  90.   
  91.         default:  
  92.             break;  
  93.     }  
  94.       
  95.     _stepNumber++;  
  96. }  

就這麼簡單,效果以下:.net

 





~~~~~~~~~~~~~~~~~~~~~~~code

工程下載地址:http://code4app.com/ios/%E6%A8%A1%E4%BB%BF58%E5%90%8C%E5%9F%8Eloading%E8%A7%86%E5%9B%BE/56ac4bc8b5ad2e9d7d8b4b9aorm

相關文章
相關標籤/搜索