談UIView Animation編程藝術(shù)

“Action高诺!”,歡迎收看這期大型扯談實(shí)用類技術(shù)節(jié)目碾篡,《小明講故事》虱而,大家好我是小明!
有人會(huì)這么問开泽,“小明牡拇,no zuo no die,你覺得哪個(gè)城市的人最作穆律?”惠呼。“我覺得倫敦的人比較作峦耘,相當(dāng)作剔蹋,作得有風(fēng)格,作得有國際范辅髓!因?yàn)?/sub>有一個(gè)倫敦人叫Charlie Chaplin泣崩,中文名叫查理 卓別林,小名叫作不停洛口,作界的佛爺啊矫付,嘻嘻~”, “幼稚5谘妗技即!” ≌燎玻“美國新墨西哥州的人也挺作的而叼,你看《貓和老鼠》中的Tom捉了140集,Jerry還是沒有被捉住豹悬,作界的二爺呢葵陵。” 瞻佛,“滾M迅荨!”伤柄。

得動(dòng)畫者得天下啊绊困,有請(qǐng)我們今天的嘉賓啞劇之王--卓別林先生和深愛Jerry的Tom先生。

文章結(jié)構(gòu)圖

“卓先生适刀,您也做過電影后期剪切工作秤朗,電影的動(dòng)畫是如何形成的呢?”

“在英國把動(dòng)畫叫Animation笔喉,它的動(dòng)詞形式是Animate取视,你們中文意思是“賦予生命”。對(duì)于人類來說常挚,眼睛看到一幅畫或一個(gè)物體后作谭,在0.34秒內(nèi)不會(huì)消失。利用這一原理奄毡,在一幅畫還沒有消失前播放下一幅畫折欠,就會(huì)給人造成一種流暢的視覺變化效果。對(duì)于蒼蠅吼过,那就不一樣锐秦,那叫反應(yīng)遲鈍∧窍龋”

chaplin.gif

“哦~卓先生說的應(yīng)該就是逐幀動(dòng)畫颗胡,每一個(gè)畫面就是一幀羹呵,逐一播放形成連續(xù)的動(dòng)畫效果。

"Tom先生,您那個(gè)時(shí)代動(dòng)畫又有什么變化嗎癞志?”

“我是看卓先生的電影長大的,1940我才出現(xiàn)在熒屏上雾叭。不過有些不一樣了夷陋,不僅僅單一畫面逐一播放,你們可以在《貓和老鼠》中汤纸,看到我的胡子被Jerry拉得夸張長衩茸,追起Jerry來,身體那些夸張的伸縮贮泞,人無法做到的楞慈,這也是動(dòng)漫的魅力幔烛。這些動(dòng)畫變化,是可以通過計(jì)算機(jī)計(jì)算每一個(gè)時(shí)間變化的信息集合成每一幀的畫面囊蓝。 ”

tom.gif

“哦~Tom先生說的應(yīng)該是關(guān)鍵幀動(dòng)畫饿悬。這個(gè)在現(xiàn)代技術(shù)比較常見的動(dòng)畫制作方式。比如現(xiàn)在大家用的蘋果產(chǎn)品聚霜,按鈕的大小變化狡恬,圖片的移動(dòng),旋轉(zhuǎn)等等這些都是關(guān)鍵幀動(dòng)畫蝎宇。作為iOS開發(fā)者的話弟劲,UIView Animation就是屬于關(guān)鍵幀動(dòng)畫這一類”。

現(xiàn)代的技術(shù)是很先進(jìn)姥芥,挺有味道的兔乞,我們一起來領(lǐng)略一下,還得請(qǐng)Tom示范一下撇眯。

一.大小動(dòng)畫(改變frame)

1.展示效果

fram大小變化

2.Show Code

-(void)changeFrame{

    CGRect originalRect = self.anView.frame;
    CGRect rect = CGRectMake(self.anView.frame.origin.x-20, self.anView.frame.origin.y-120, 160, 80);

    [UIView animateWithDuration:1 animations:^{
        self.anView.frame = rect;
    } completion:^(BOOL finished) {
        [UIView animateWithDuration:1 animations:^{
            self.anView.frame = originalRect;
        }];
    
    }];
}   

二.拉伸動(dòng)畫(改變bounds)

1.展示效果

bounds變化

2.Show Code

-(void)changeBounds{

    CGRect originalBounds = self.anView.bounds;
    //盡管這個(gè)rect的x报嵌,y跟原始的不同,動(dòng)畫也只是改變了寬高
    CGRect rect = CGRectMake(0, 0, 300, 120);

    [UIView animateWithDuration:1 animations:^{
    self.anView.bounds = rect;
    } completion:^(BOOL finished) {
        [UIView animateWithDuration:1 animations:^{
            self.anView.bounds = originalBounds;
        }];
    
    }];
}

三.轉(zhuǎn)移動(dòng)畫(改變center)

1.展示效果

center變化.gif

2.Show Code

-(void)changeCenter{

    CGPoint originalPoint = self.anView.center;
    CGPoint point = CGPointMake(self.anView.center.x, self.anView.center.y-170);

    [UIView animateWithDuration:0.3 animations:^{
        self.anView.center = point;
    } completion:^(BOOL finished) {
        [UIView animateWithDuration:1 animations:^{
            self.anView.center = originalPoint;
        }];
    
    }]; 
}

謝謝二爺?shù)氖痉缎荛唬?jīng)典的表情也勾起很多人的回憶锚国。好,我們回到現(xiàn)實(shí)玄坦,以上的3個(gè)例子血筑,大家不難發(fā)現(xiàn)共同的特點(diǎn)和重復(fù)性。

1.都是改變UIView的屬性就可以產(chǎn)生動(dòng)畫煎楣。
2.都是帶有block做結(jié)束回調(diào)豺总,對(duì)結(jié)束監(jiān)控
3.動(dòng)畫大小和位置變化可以通過多種方式實(shí)現(xiàn)

“佛爺,是不是很好奇我們并沒有使用Tom先生很多圖片組逐一顯示择懂?來喻喳,也請(qǐng)您下礦一走!”困曙”砺祝“哈哈,好慷丽!不過那碗河水我還是要倒的”蹦哼,“行,隨你翻騰~”要糊。

四.旋轉(zhuǎn)動(dòng)畫(改變transform)

1.展示效果

transform變化.gif

2.Show Code

-(void)transform{
    CGAffineTransform originalTransform = self.anView.transform;
    [UIView animateWithDuration:2 animations:^{
        //self.anView.transform = CGAffineTransformMakeScale(0.6, 0.6);//縮放
        //self.anView.transform = CGAffineTransformMakeTranslation(60, -60);
        self.anView.transform = CGAffineTransformMakeRotation(4.0f);
    
    } completion:^(BOOL finished) {
        [UIView animateWithDuration:2 animations:^{
            self.anView.transform = originalTransform;
        
        }];
    }];
}  

五.透明度動(dòng)畫(改變alpha)

1.展示效果

alpha變化.gif

2.Show Code

-(void)alpha{
    [UIView animateWithDuration:2 animations:^{
        self.anView.alpha = 0.3;
    } completion:^(BOOL finished) {
        [UIView animateWithDuration:2 animations:^{
            self.anView.alpha = 1;
        }];

    }];
}  

卓先生纲熏,停停停,來,回到我們舞臺(tái)中間來局劲。就以上5中都能讓您玩的這么愉快勺拣,以上都是僅僅修改本身的屬性值,我再介紹剩下三種基于UIView特別的動(dòng)畫容握,一個(gè)是Keyframe宣脉,一個(gè)SpringTransition動(dòng)畫。一人一個(gè)輪著來剔氏,卓先生你先。

六.背景顏色Keyframes動(dòng)畫(改變background)

1.展示效果

background變化.gif

2.Show Code

-(void)changeBackground{

    [UIView animateKeyframesWithDuration:9.0 delay:0.f options:UIViewKeyframeAnimationOptionCalculationModeLinear animations:^{
        [UIView addKeyframeWithRelativeStartTime:0.f relativeDuration:1.0 / 4 animations:^{
            self.anView.backgroundColor = [UIColor colorWithRed:0.9475 green:0.1921 blue:0.1746 alpha:1.0];
        }];
        [UIView addKeyframeWithRelativeStartTime:1.0 / 4 relativeDuration:1.0 / 4 animations:^{
            self.anView.backgroundColor = [UIColor colorWithRed:0.1064 green:0.6052 blue:0.0334 alpha:1.0];
        }];
        [UIView addKeyframeWithRelativeStartTime:2.0 / 4 relativeDuration:1.0 / 4 animations:^{
            self.anView.backgroundColor = [UIColor colorWithRed:0.1366 green:0.3017 blue:0.8411 alpha:1.0];
        }];
        [UIView addKeyframeWithRelativeStartTime:3.0 / 4 relativeDuration:1.0 / 4 animations:^{
            self.anView.backgroundColor = [UIColor colorWithRed:0.619 green:0.037 blue:0.6719 alpha:1.0];
        }];
        [UIView addKeyframeWithRelativeStartTime:3.0 / 4 relativeDuration:1.0 / 4 animations:^{
            self.anView.backgroundColor = [UIColor whiteColor];
        }];
    } completion:^(BOOL finished) {
        NSLog(@"動(dòng)畫結(jié)束");
    }];
}

七.Spring動(dòng)畫(iOS7.0起)

1.展示效果

spring動(dòng)畫.gif

2.Show Code

-(void)springAnimation{
    CGRect originalRect = self.anView.frame;
    CGRect rect = CGRectMake(self.anView.frame.origin.x-80, self.anView.frame.origin.y, 120, 120);

    [UIView animateWithDuration:0.4 delay:0 usingSpringWithDamping:0.5 initialSpringVelocity:4 options:UIViewAnimationOptionCurveLinear animations:^{
        self.anView.frame = rect;
        } completion:^(BOOL finished) {
            [UIView animateWithDuration:1 delay:1 usingSpringWithDamping:0.5 initialSpringVelocity:4 options:UIViewAnimationOptionCurveLinear animations:^{
                self.anView.frame = originalRect;
            } completion:^(BOOL finished) {
        
        }];
    }];
}

八.transition動(dòng)畫

1.展示效果

transition動(dòng)畫.gif

2.Show Code

-(void)transitionAnimation{
    [UIView transitionWithView:self.anView duration:2.0 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
        //self.anView.backgroundColor = [UIColor blueColor];
    } completion:^(BOOL finished) {
        [UIView transitionWithView:self.anView duration:2.0 options:UIViewAnimationOptionTransitionFlipFromRight animations:^{
        //self.anView.backgroundColor = [UIColor greenColor];
        } completion:^(BOOL finished) {
        
        }];
    }];
}

九.關(guān)于參數(shù)option選擇說明

1.UIViewAnimationOptions

UIViewAnimationOptionLayoutSubviews            //進(jìn)行動(dòng)畫時(shí)布局子控件
UIViewAnimationOptionAllowUserInteraction      //進(jìn)行動(dòng)畫時(shí)允許用戶交互
UIViewAnimationOptionBeginFromCurrentState     //從當(dāng)前狀態(tài)開始動(dòng)畫
UIViewAnimationOptionRepeat                    //無限重復(fù)執(zhí)行動(dòng)畫
UIViewAnimationOptionAutoreverse               //執(zhí)行動(dòng)畫回路
UIViewAnimationOptionOverrideInheritedDuration //忽略嵌套動(dòng)畫的執(zhí)行時(shí)間設(shè)置
UIViewAnimationOptionOverrideInheritedCurve    //忽略嵌套動(dòng)畫的曲線設(shè)置
UIViewAnimationOptionAllowAnimatedContent      //轉(zhuǎn)場:進(jìn)行動(dòng)畫時(shí)重繪視圖
UIViewAnimationOptionShowHideTransitionViews   //轉(zhuǎn)場:移除(添加和移除圖層的)動(dòng)畫效果
UIViewAnimationOptionOverrideInheritedOptions  //不繼承父動(dòng)畫設(shè)置

UIViewAnimationOptionCurveEaseInOut            //時(shí)間曲線竹祷,慢進(jìn)慢出(默認(rèn)值)
UIViewAnimationOptionCurveEaseIn               //時(shí)間曲線谈跛,慢進(jìn)
UIViewAnimationOptionCurveEaseOut              //時(shí)間曲線,慢出
UIViewAnimationOptionCurveLinear               //時(shí)間曲線塑陵,勻速

UIViewAnimationOptionTransitionNone            //轉(zhuǎn)場感憾,不使用動(dòng)畫
UIViewAnimationOptionTransitionFlipFromLeft    //轉(zhuǎn)場,從左向右旋轉(zhuǎn)翻頁
UIViewAnimationOptionTransitionFlipFromRight   //轉(zhuǎn)場令花,從右向左旋轉(zhuǎn)翻頁
UIViewAnimationOptionTransitionCurlUp          //轉(zhuǎn)場阻桅,下往上卷曲翻頁
UIViewAnimationOptionTransitionCurlDown        //轉(zhuǎn)場,從上往下卷曲翻頁
UIViewAnimationOptionTransitionCrossDissolve   //轉(zhuǎn)場兼都,交叉消失和出現(xiàn)
UIViewAnimationOptionTransitionFlipFromTop     //轉(zhuǎn)場嫂沉,從上向下旋轉(zhuǎn)翻頁
UIViewAnimationOptionTransitionFlipFromBottom  //轉(zhuǎn)場,從下向上旋轉(zhuǎn)翻頁

2.UIViewKeyframeAnimationOptions

UIViewAnimationOptionLayoutSubviews           //進(jìn)行動(dòng)畫時(shí)布局子控件
UIViewAnimationOptionAllowUserInteraction     //進(jìn)行動(dòng)畫時(shí)允許用戶交互
UIViewAnimationOptionBeginFromCurrentState    //從當(dāng)前狀態(tài)開始動(dòng)畫
UIViewAnimationOptionRepeat                   //無限重復(fù)執(zhí)行動(dòng)畫
UIViewAnimationOptionAutoreverse              //執(zhí)行動(dòng)畫回路
UIViewAnimationOptionOverrideInheritedDuration //忽略嵌套動(dòng)畫的執(zhí)行時(shí)間設(shè)置
UIViewAnimationOptionOverrideInheritedOptions //不繼承父動(dòng)畫設(shè)置

UIViewKeyframeAnimationOptionCalculationModeLinear     //運(yùn)算模式 :連續(xù)
UIViewKeyframeAnimationOptionCalculationModeDiscrete   //運(yùn)算模式 :離散
UIViewKeyframeAnimationOptionCalculationModePaced      //運(yùn)算模式 :均勻執(zhí)行
UIViewKeyframeAnimationOptionCalculationModeCubic      //運(yùn)算模式 :平滑
UIViewKeyframeAnimationOptionCalculationModeCubicPaced //運(yùn)算模式 :平滑均勻

UIView的動(dòng)畫而言扮碧,UIViewKeyframeAnimationOptions緊在Keyframes趟章,其余的都是UIViewAnimationOptions

十.總結(jié)和擴(kuò)展

1.UIView動(dòng)畫主要是變化UIView的自帶屬性
2.UIView動(dòng)畫可以有很多種方式實(shí)現(xiàn)同一效果
3.Spring動(dòng)畫iOS7.0以上才有
4.UIViewKeyframeAnimationOptions用著Keyframes動(dòng)畫慎王,其余都用UIViewAnimationOptions枚舉
這就以上UIView Animation的動(dòng)畫的基礎(chǔ)內(nèi)容了蚓土,節(jié)目到了尾聲。嘿赖淤,卓先生蜀漆,Tom先生停下來,給大家說byebye啦咱旱。謝謝大家确丢,讓我們?cè)俅我詿崃业恼坡暩兄x卓先生和Tom先生。謝謝~~

十一.源碼地址

https://github.com/minggo620/iOSViewAnimation
謝謝收看這期大型扯淡實(shí)用技術(shù)類節(jié)目莽龟,《小明講故事》蠕嫁。"Tom老師,你對(duì)我眨眼什么意思毯盈?"剃毒,“你們中國的《喜洋洋和灰太狼》捉了多少集?”

【原創(chuàng)出品 未經(jīng)授權(quán) 禁止轉(zhuǎn)載】
【歡迎微友分享轉(zhuǎn)發(fā) 禁止公號(hào)等未經(jīng)授權(quán)的轉(zhuǎn)載】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赘阀,隨后出現(xiàn)的幾起案子益缠,更是在濱河造成了極大的恐慌,老刑警劉巖基公,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幅慌,死亡現(xiàn)場離奇詭異,居然都是意外死亡轰豆,警方通過查閱死者的電腦和手機(jī)胰伍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酸休,“玉大人骂租,你說我怎么就攤上這事“咚荆” “怎么了渗饮?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長宿刮。 經(jīng)常有香客問我互站,道長,這世上最難降的妖魔是什么僵缺? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任胡桃,我火速辦了婚禮,結(jié)果婚禮上谤饭,老公的妹妹穿的比我還像新娘标捺。我一直安慰自己,他們只是感情好揉抵,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布亡容。 她就那樣靜靜地躺著,像睡著了一般冤今。 火紅的嫁衣襯著肌膚如雪闺兢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天戏罢,我揣著相機(jī)與錄音屋谭,去河邊找鬼。 笑死龟糕,一個(gè)胖子當(dāng)著我的面吹牛桐磁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播讲岁,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼我擂,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼衬以!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起校摩,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤看峻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后衙吩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體互妓,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年坤塞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冯勉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡尺锚,死狀恐怖珠闰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瘫辩,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布坛悉,位于F島的核電站伐厌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏裸影。R本人自食惡果不足惜挣轨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望轩猩。 院中可真熱鬧卷扮,春花似錦、人聲如沸均践。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽彤委。三九已至鞭铆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間焦影,已是汗流浹背车遂。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斯辰,地道東北人舶担。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像彬呻,于是被迫代替她去往敵國和親衣陶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柄瑰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,501評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件祖搓、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,022評(píng)論 4 62
  • 概覽 在iOS中隨處都可以看到絢麗的動(dòng)畫效果拯欧,實(shí)現(xiàn)這些動(dòng)畫的過程并不復(fù)雜详囤,今天將帶大家一窺iOS動(dòng)畫全貌。在這里你...
    被吹落的風(fēng)閱讀 1,548評(píng)論 1 2
  • 盼星星盼月亮,盼到9月份该贾,每天精力充沛羔杨,各種搞怪的熊孩子終于被送進(jìn)了幼兒園,心中瞬間覺得輕松了許多杨蛋,帶娃帶了三年多...
    一佑?jì)寢?/span>閱讀 1,144評(píng)論 2 2
  • 那片杏林 很孤獨(dú) 周圍連塊石頭都沒有 我假裝若無其事溜進(jìn)去 這些杏兒怎么也偷不盡 我牽起衣兜趔趄著身體 生怕那矮小...
    說話的啞巴閱讀 297評(píng)論 5 3