1. 程式人生 > >ios loading檢視動畫(模仿58同城)

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

最近看了58同城的載入檢視,感覺很不錯,如下圖:


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

下面直接貼程式碼:

上面圖形的動畫

-(void) loadingAnimation:(float)fromValue toValue:(float)toValue timingFunction:(NSString * const)tf
{


    //位置
    CABasicAnimation *panimation = [CABasicAnimation animation];
    panimation.keyPath = @"position.y";
    panimation.fromValue 
[email protected]
(fromValue); panimation.toValue = @(toValue); panimation.duration = ANIMATION_DURATION_SECS; panimation.timingFunction = [CAMediaTimingFunction functionWithName:tf]; //旋轉 CABasicAnimation *ranimation = [CABasicAnimation animation]; ranimation.keyPath = @"transform.rotation"; ranimation.fromValue
[email protected]
(0); ranimation.toValue = @(M_PI_2); ranimation.duration = ANIMATION_DURATION_SECS; ranimation.timingFunction = [CAMediaTimingFunction functionWithName:tf]; //組合 CAAnimationGroup *group = [[CAAnimationGroup alloc] init]; group.animations = @[ panimation,ranimation]; group.duration = ANIMATION_DURATION_SECS; group.beginTime = 0; group.fillMode=kCAFillModeForwards; group.removedOnCompletion = NO; [_shapView.layer addAnimation:group forKey:@"basic"]; }

下面是陰影動畫

-(void) scaleAnimation:(float) fromeValue toValue:(float)toValue timingFunction:(NSString * const)tf
{

    //縮放
    CABasicAnimation *sanimation = [CABasicAnimation animation];
    sanimation.keyPath = @"transform.scale";
    sanimation.fromValue [email protected](fromeValue);
    sanimation.toValue = @(toValue);
    sanimation.duration = ANIMATION_DURATION_SECS;
    
    sanimation.fillMode = kCAFillModeForwards;
    sanimation.timingFunction = [CAMediaTimingFunction functionWithName:tf];
    sanimation.removedOnCompletion = NO;
    
    [_shadowView.layer addAnimation:sanimation forKey:@"shadow"];
    

}
然後我是開了個定時器去重新整理動畫,當然也有其他方法
-(void)animateNextStep
{
    switch (_stepNumber)
    {
        case 0:
        {
            
            
            _shapView.image=[UIImage imageNamed:@"loading_circle"];
            
            
            [self loadingAnimation:_fromValue toValue:_toValue timingFunction:kCAMediaTimingFunctionEaseIn];
            
            [self scaleAnimation:_scalefromValue toValue:_scaletoValue timingFunction:kCAMediaTimingFunctionEaseIn];
            
            
        }
            break;
        case 1:
        {
            
            
            _shapView.image=[UIImage imageNamed:@"loading_square"];
            
            [self loadingAnimation:_toValue toValue:_fromValue timingFunction:kCAMediaTimingFunctionEaseOut];

            [self scaleAnimation:_scaletoValue toValue:_scalefromValue timingFunction:kCAMediaTimingFunctionEaseIn];

        }
            break;
        case 2:
        {
        
        
            
            _shapView.image=[UIImage imageNamed:@"loading_square"];

            [self loadingAnimation:_fromValue toValue:_toValue timingFunction:kCAMediaTimingFunctionEaseIn];

            [self scaleAnimation:_scalefromValue toValue:_scaletoValue timingFunction:kCAMediaTimingFunctionEaseIn];


        }
            break;
            
        case 3:
        {

            _shapView.image=[UIImage imageNamed:@"loading_triangle"];

        
            [self loadingAnimation:_toValue toValue:_fromValue timingFunction:kCAMediaTimingFunctionEaseOut];

            [self scaleAnimation:_scaletoValue toValue:_scalefromValue timingFunction:kCAMediaTimingFunctionEaseIn];

            

        }
            
            break;
            
        case 4:
        {
            
            _shapView.image=[UIImage imageNamed:@"loading_triangle"];
            
            [self loadingAnimation:_fromValue toValue:_toValue timingFunction:kCAMediaTimingFunctionEaseIn];

            
            [self scaleAnimation:_scalefromValue toValue:_scaletoValue timingFunction:kCAMediaTimingFunctionEaseIn];

        }
            
            break;
        case 5:
        {
            
            _shapView.image=[UIImage imageNamed:@"loading_circle"];
            
            [self loadingAnimation:_toValue toValue:_fromValue timingFunction:kCAMediaTimingFunctionEaseOut];
            
            [self scaleAnimation:_scaletoValue toValue:_scalefromValue timingFunction:kCAMediaTimingFunctionEaseIn];

            
            _stepNumber = -1;
            
        }
            
            break;

        default:
            break;
    }
    
    _stepNumber++;
}
就這麼簡單,效果如下:




~~~~~~~~~~~~~~~~~~~~~~~

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

相關推薦

ios loading檢視動畫模仿58

最近看了58同城的載入檢視,感覺很不錯,如下圖: 所以想模仿寫一個,下載58同城的app,解壓,發現它用的是圖片來實現的動畫效果,並不是繪製出來的,所以這就相對簡單些了,其實整個動畫的邏輯不復雜,無非是幾個動畫的組合,然後切換圖片,注意細節處,比如下面的陰影部分也是個動畫

2018秋招前端筆試題58

填空題 號碼段為131到139的11位手機號碼正則校驗:/^13[1-9][0-9]{8}$/ 移動端,如何在html中通過連結調起撥打電話:’<a href="tel:10086">1

UINavigationController 自定義轉場動畫模仿淘寶App跳轉

imp dal iap 默認 自定義轉場動畫 ict oda ack 調用 制作目的 想要自定義系統轉場動畫速度 放棄不順暢的 NavigationBar 隱藏消失 幹脆直接幹掉每個頁面的 NavigationBar,在使用 UINavigationController

58字型解密函式

from fontTools.ttLib import TTFont import base64 from io import BytesIO def make_font_file(base64_string:str): #將base64編碼的字型字串解碼成二進位制編碼 bin_da

58的字型解密

在爬蟲的時候,經常會遇到一些反爬機制,但在反爬中字型加密屬於比較難解決的一部分。今天介紹一個比較簡單的解密方法。 1、首先找到加密的字型,開啟58的一個連結:https://zz.58.com/pinpaigongyu/?utm_source=market&spm=u-LlFBrx8a1

58 iOS 客戶端元件化演變思路整理

1、 http://geek.csdn.net/news/detail/193435 2、標題:58 同城 iOS 客戶端元件化演變歷程 3、第一版App架構:功能比較簡單,出發點是為了快速搶佔市場,採取“短平快”的方式開發。 4、第二版架構:

58 iOS 客戶端搜尋模組元件化實踐

【編者按】58 同城 App 自從 1.0 版本開始,便已經提供了搜尋功能。隨著版本的迭代、業務的複雜,搜尋框架也在不斷受到挑戰。諸如程式碼不能複用、耦合度高、業務功能接入成本高等問題日積月累,成為需要迫切解決的問題。本文從具體實際問題入手,詳述了利用元件

實訓專案——58出租資訊抓取

本節課將利用前面學習的基礎知識,實現58同城出租資訊抓取。爬蟲整體流程58同城抓取流程進入成都小區頁面,確定抓取目標 觀察頁面,獲取各行政區的連結 分行政區抓取各小區的URL 進入各小區詳情頁面,抓取名字、價格、地址、年份等資訊 抓取小區二手房頁面第一頁的價格,在管道中求該小

iOS動畫位移/透明/縮小/擴大

 位移:  UIView  * testView; UIView.animateWithDuration(1, animations: { testView.center.x = self.vi

Android頁面翻轉動畫模仿CSDN賬號登入的翻轉效果

昨天下載了CSDN的APP,進入多種方式選擇登入的頁面,然後我選擇用CSDN賬號登入,發現有頁面翻轉的效果進入登入頁面。瞬時感覺好炫,自己感覺效果很好。平時別的APP登入的時候,就是直接進入登入頁面,沒有任何效果。這次看到旋轉的效果,頓時眼前一亮,所以我就研究了一下,想做個

python:爬取58全部二手商品資訊轉轉網

python_58ershou python+beautifulsoup多執行緒爬取58同城二手全部商品資訊,並在jupyter上將資料視覺化 專案主程式在58_index中: 建立mango資料庫表 #連線MongoDB資料庫 client

58 2013研發一面面試含參考答案

1.手寫KMP演算法 我猜測考這道題並不是真的要被面者把KMP演算法一字不漏的寫出來(當然能寫出來最好),面試官一上來就出一道很難的題可能有兩點用意: 1)看看被面者心理承受能力,是說道KMP就跪地求饒呢還是拼死拼活寫點算點?心態很重要,顯然後者更好 2)寫出程式碼了,看看

網頁資料採集系統58、美團

QQ/微信 112908676 下載過程中彈出輸入密碼框,請選擇取消,不影響使用 支援Windows XP/Vista/7/8/10 需求 美團獲取外賣和團購商戶的基本資訊,比如商戶名稱、地址以及聯絡電話 將搜尋的結果匯出至Excel表中,無需使用者手動翻頁

Android PullToRrefresh 自定義下拉刷新動畫 listview、scrollview等

appear ram nal ima cas 創建 protect tom inter PullToRefreshScrollView 自定義下拉刷新動畫,只需改一處。 以下部分轉載自http://blog.csdn.net/superjunjin/article/

582018校招前端筆試題總結

opacity splay nbsp oms indexof init == city function 1. 用js實現一個隨機打亂數組順序的函數,要求可以設定數組中任意1個字符的位置不變,其他位置的元素位置隨機變化 思路:函數接受兩個參數:第一個參數是原數組,第二個參

Python爬蟲(二)——對開封市58出租房數據進行分析

boxplot bsp des das png fig 分析 set 技術 出租房面積(area)           出租房價格(price)       

Python爬蟲(三)——開封市58出租房決策樹構建

off parent decision second string pre IE for 爬蟲 決策樹框架: 1 # coding=utf-8 2 import matplotlib.pyplot as plt 3 4 decisionNode = d

陳春雷【58簡歷采集,真實手機號聯系方式獲取】

的人 target ref .net tps -a 存在 有效 電話 現在58同城上的下載到的簡歷都采用了隱藏真實的手機號,使用58的虛擬號顯示在前臺,而這虛擬號是有有效期的,一般3天就失效了。如果想把下載到的簡歷保存在本地,或者保存在自己公司的人才數據庫中,那要得電話一

成都58快速租房的爬蟲,nodeJS爬蟲

保存 自定義 租房子 conf flex 找到 安裝 req 獲得 我個人還是非常奉行 talk is cheap, show me your code 這個理念的。 只希望能夠幫助到真正需要的人,幫你快速找到物美價廉的房子。 我也是租房子的時候,希望快速找到自己覺得不錯又

Silverlight & Blend動畫設計系列十一:沿路徑動畫Animation Along a Path

幀動畫 -- long png ref wid found 不用 system.in 原文:Silverlight & Blend動畫設計系列十一:沿路徑動畫(Animation Along a Path)  Silverlight 提供一個好的動畫基礎,但缺少一種