iOS中實現(xiàn)彈簧動畫

我們都知道iOS9 CASpringAnimation 彈簧動畫渔嚷,操作簡單肢专,容易實現(xiàn)妻枕,目前使用也比較廣泛,下面我給大家介紹一種pop的彈簧效果葛账,跟CASpringAnimation 彈簧動畫 很相似
CocaPods加載 pod 'pop', '~> 1.0.9'

首先我們先看下動畫的效果


2.gif

具體實現(xiàn)如下

#import "CSPlusVC.h"
#import "CSVerticalButton.h" //自定義封裝的button
#import <POP.h>

@implementation CSPlusVC

- (void)viewDidLoad {
    [super viewDidLoad];
  
    [self addVerticalButtons];
  
}
- (void)addVerticalButtons{
 //點擊之前 關閉交互
    self.view.userInteractionEnabled = NO;
//創(chuàng)建兩個數組 分別存button上image的名字和title的名字
    NSArray *imagesArray = @[@"renwu",@"shuju",@"shudu",@"xianhua",@"yanlun",@"quantou"];
    NSArray *titleArray = @[@"人物",@"數據",@"數讀",@"閑話",@"言論",@"拳頭"];
   // kWidth為整屏寬柠衅,kHeight為整屏高
    CGFloat buttonW = kWidth*0.2;
    CGFloat buttonH = buttonW + 0.04*kHeight;
    CGFloat buttonStartY = (kHeight - 2*buttonW)*0.5;//buttonY的開始位置
    CGFloat buttonStartX = 20;
    int maxCols = 3;//每行最多三個
    
    CGFloat xMargin = (kWidth - 2*buttonStartX - maxCols *buttonW)/(maxCols-1); 
    
    for (int i=0;i<6;i++) {
  //添加6個button
        CSVerticalButton *button = [[CSVerticalButton alloc] init];
//設置button的相關屬性
        button.titleLabel.font = [UIFont systemFontOfSize:15];
        [button setTitle:titleArray[i] forState:(UIControlStateNormal)];
        [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [button setImage:[UIImage imageNamed:imagesArray[i]] forState:(UIControlStateNormal)];
        button.tag = i; //原始方法 給button一個tag值 用與后面點擊方法
        [button addTarget:self action:@selector(clickButtonAciton:) forControlEvents:(UIControlEventTouchUpInside)];
        
        int row = i/maxCols; //行
        int col = i%maxCols;  //列
        CGFloat buttonX = buttonStartX+col*(buttonW+xMargin);
        CGFloat buttonEndY = buttonStartY +row*(buttonH+10);
        CGFloat buttonBeginY = buttonEndY -kHeight;
        [self.view addSubview:button];
        
//創(chuàng)建POPSpringAnimation動畫 對象  動畫結束位置就是button最終frame的位置 所以不需要一開始設置button在window中的位置 這也是跟CASpringAnimation的區(qū)別
        POPSpringAnimation *anim = [POPSpringAnimation animationWithPropertyNamed:kPOPViewFrame]; //改變frame
        anim.fromValue = [NSValue valueWithCGRect:CGRectMake(buttonX, buttonBeginY, buttonW, buttonH)];//動畫開始位置
        anim.toValue = [NSValue valueWithCGRect:CGRectMake(buttonX, buttonEndY, buttonW, buttonH)];//動畫結束位置
        anim.springBounciness = 15;//彈簧反彈彈度[4,20]
        anim.springSpeed  = 15;//彈簧速度[4,20]
        anim.beginTime = CACurrentMediaTime()+0.1*i;//動畫開始時間
        //動畫結束后 打開用戶交互界面
        [anim setCompletionBlock:^(POPAnimation *anim, BOOL finished) {
            self.view.userInteractionEnabled = YES;
        }];
        [button pop_addAnimation:anim forKey:nil];
        
    }

    // 添加標語
    UIImageView *sloganView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"app_slogan"]];
    [self.view addSubview:sloganView];
    
    // 標語動畫 
    POPSpringAnimation *anim = [POPSpringAnimation animationWithPropertyNamed:kPOPViewCenter]; //改變center位置
    CGFloat centerX = kWidth * 0.5;
    CGFloat centerEndY = kHeight * 0.2;
    CGFloat centerBeginY = centerEndY - kHeight;
    anim.fromValue = [NSValue valueWithCGPoint:CGPointMake(centerX, centerBeginY)];
    anim.toValue = [NSValue valueWithCGPoint:CGPointMake(centerX, centerEndY)];
    
    anim.springBounciness = 15;
    anim.springSpeed = 15;
    anim.beginTime = CACurrentMediaTime() + imagesArray.count * 0.1;
    [anim setCompletionBlock:^(POPAnimation *anim, BOOL finished) {
        // 標語動畫執(zhí)行完畢, 恢復點擊事件
        self.view.userInteractionEnabled = YES;
    }];
    [sloganView pop_addAnimation:anim forKey:nil];
}
//取消按鈕的方法
- (IBAction)cancelAction:(id)sender {
    
    [self cancelWithCompletionBlock:nil];
    
}

//取消的block方法
- (void)cancelWithCompletionBlock:(void(^)())completionBlock
{
 //關閉交互
    self.view.userInteractionEnabled = NO;
    int index = 0;
//遍歷父視圖   用于設置頁面消失時的動畫
    for (UIButton *button in self.view.subviews) {
        if ([button isKindOfClass:[CSVerticalButton class]]) {
  //給button設置下墜動畫 用最普通的POPBasicAnimation就可以
            POPBasicAnimation *anim = [POPBasicAnimation animationWithPropertyNamed:kPOPViewCenter];
            CGFloat centerY = button.center.y + kHeight;
            anim.toValue = [NSValue valueWithCGPoint:CGPointMake(button.center.x, centerY)];
            anim.beginTime = CACurrentMediaTime()+ index*0.1;
            [button pop_addAnimation:anim forKey:nil];
            index++;
            if (index==5) { //在最后一個動畫執(zhí)行完畢后 ,頁面退出 籍琳,然后調用block 菲宴,block里執(zhí)行要點擊的事件
                [anim setCompletionBlock:^(POPAnimation *anim, BOOL finished) {
                    [self dismissViewControllerAnimated:NO completion:nil];
                    if (completionBlock) {
                        completionBlock();
                    }
                }];
            }
        }
    }

}

相信我寫的已經很詳細了,如有問提趋急,請留言

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末喝峦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子呜达,更是在濱河造成了極大的恐慌谣蠢,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闻丑,死亡現(xiàn)場離奇詭異漩怎,居然都是意外死亡,警方通過查閱死者的電腦和手機嗦嗡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門勋锤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侥祭,你說我怎么就攤上這事叁执∏牙澹” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵谈宛,是天一觀的道長次哈。 經常有香客問我,道長吆录,這世上最難降的妖魔是什么窑滞? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮恢筝,結果婚禮上哀卫,老公的妹妹穿的比我還像新娘。我一直安慰自己撬槽,他們只是感情好此改,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著侄柔,像睡著了一般共啃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上暂题,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天移剪,我揣著相機與錄音,去河邊找鬼薪者。 笑死挂滓,一個胖子當著我的面吹牛,可吹牛的內容都是我干的啸胧。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼幔虏,長吁一口氣:“原來是場噩夢啊……” “哼纺念!你這毒婦竟也來了?” 一聲冷哼從身側響起想括,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤陷谱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瑟蜈,有當地人在樹林里發(fā)現(xiàn)了一具尸體烟逊,經...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年铺根,在試婚紗的時候發(fā)現(xiàn)自己被綠了宪躯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡位迂,死狀恐怖访雪,靈堂內的尸體忽然破棺而出详瑞,到底是詐尸還是另有隱情,我是刑警寧澤臣缀,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布坝橡,位于F島的核電站,受9級特大地震影響精置,放射性物質發(fā)生泄漏计寇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一脂倦、第九天 我趴在偏房一處隱蔽的房頂上張望番宁。 院中可真熱鬧,春花似錦狼讨、人聲如沸贝淤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽播聪。三九已至,卻和暖如春布隔,著一層夾襖步出監(jiān)牢的瞬間离陶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工衅檀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留招刨,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓哀军,卻偏偏與公主長得像沉眶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子杉适,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內容