iOS UIDynamicAnimator動畫實現(xiàn)

UIDynamicAnimator 是iOS7之后引入的一個動態(tài)庫,用來模擬實現(xiàn)現(xiàn)實世界的物理模型熄云,實現(xiàn)的動畫有動感。主要模擬的物理行為有:UIGravityBehavior(重力)拖云,UIAttachmentBehavior(吸附)摘仅,UISnapBehavior(震蕩),UIPushBehavior(推動)叮叹,UICollisionBehavior(碰撞)艾栋,UIDynamicItemBehavior(配置一些公用的屬性,與其他的Dynamic Behavior共同配合)蛉顽。

本文主要介紹一個未完待續(xù)的小動畫蝗砾,結合UIGravityBehavior、UISnapBehavior携冤、UICollisionBehavior實現(xiàn)悼粮。

一、初始化UI

- (void)initSubViews {- (void)initSubViews {

[self.view addSubview:self.weiImageView];

[self.view addSubview:self.wanImageView];

[self.view addSubview:self.daiImageView];

[self.view addSubview:self.xuImageView];

[self.view addSubview:self.longmaoImageView];

_weiImageView.cy_originY = -100;

_wanImageView.cy_originY = -100;

_daiImageView.cy_originY = -100;

_xuImageView.cy_originY = -100;

}

初始化ImageView的時候曾棕,設置ImageView的frame是你想設置的位置扣猫,這里又設置各個frame的origin.y為0是為了實現(xiàn)掉落效果。

二翘地、實現(xiàn)動畫

- (void)animation {

//實現(xiàn)龍貓的晃動動畫申尤,設置龍貓不間斷晃動

CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];

animation.keyPath = @"transform.rotation";

animation.values = @[@(-20 / 180.0 * M_PI), @(10 / 180.0 * M_PI), @(-20 /180.0 * M_PI)];

animation.removedOnCompletion = NO;

animation.duration = 0.5;

animation.repeatCount = MAXFLOAT;

[self.longmaoImageView.layer addAnimation:animation forKey:nil];

//設置四個ImageView的吸附動畫癌幕,由初始位置吸附到各個ImageView的center位置,每個ImageView 的路徑不一樣

UISnapBehavior *snap = [[UISnapBehavior alloc] initWithItem:_weiImageView snapToPoint:weiInitialPoint];

snap.damping = 1.0;

UISnapBehavior *snap1 = [[UISnapBehavior alloc] initWithItem:_wanImageView snapToPoint:wanInitialPoint];

snap1.damping = 1.0;

UISnapBehavior *snap2 = [[UISnapBehavior alloc] initWithItem:_daiImageView snapToPoint:daiInitialPoint];

snap2.damping = 1.0;

UISnapBehavior *snap3 = [[UISnapBehavior alloc] initWithItem:_xuImageView snapToPoint:xuInitialPoint];

snap3.damping = 1.0;

//重力效果昧穿,聲明一個對象勺远,可以循環(huán)加載

UIGravityBehavior *gravity = [[UIGravityBehavior alloc] init];

[gravity addItem:_weiImageView];

[gravity addItem:_wanImageView];

[gravity addItem:_daiImageView];

[gravity addItem:_xuImageView];

//彈性效果,這里設置碰撞類型collisionMode為碰撞所有

UICollisionBehavior *collision = [[UICollisionBehavior alloc] init];

collision.collisionMode = UICollisionBehaviorModeEverything;

[collision addItem:_weiImageView];

[collision addItem:_wanImageView];

[collision addItem:_daiImageView];

[collision addItem:_xuImageView];

//初始化 self.animator时鸵,self.animator的ReferenceView是所有子類View的父View胶逢,承載所有動畫

//snap吸附動畫的發(fā)生通過線程設置延時,展現(xiàn)出的效果有節(jié)奏

self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

[self.animator addBehavior:snap];

});

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

[self.animator addBehavior:snap1];

});

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.8 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

[self.animator addBehavior:snap2];

});

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

[self.animator addBehavior:snap3];

});

}

三饰潜、細節(jié)補充

關于UICollisionBehavior的collisionMode的三種效果初坠,可以參考文章

http://www.reibang.com/p/2ca3b16026a5

另外附上本文Demo地址,感興趣的小伙伴可以參考一下彭雾,如有不合理的地方歡迎指正某筐!

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市冠跷,隨后出現(xiàn)的幾起案子南誊,更是在濱河造成了極大的恐慌,老刑警劉巖蜜托,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抄囚,死亡現(xiàn)場離奇詭異,居然都是意外死亡橄务,警方通過查閱死者的電腦和手機幔托,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜂挪,“玉大人重挑,你說我怎么就攤上這事√匿蹋” “怎么了谬哀?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長严肪。 經(jīng)常有香客問我史煎,道長,這世上最難降的妖魔是什么驳糯? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任篇梭,我火速辦了婚禮,結果婚禮上酝枢,老公的妹妹穿的比我還像新娘恬偷。我一直安慰自己,他們只是感情好帘睦,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布袍患。 她就那樣靜靜地躺著坦康,像睡著了一般。 火紅的嫁衣襯著肌膚如雪协怒。 梳的紋絲不亂的頭發(fā)上涝焙,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天卑笨,我揣著相機與錄音孕暇,去河邊找鬼。 笑死赤兴,一個胖子當著我的面吹牛妖滔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播桶良,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼座舍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了陨帆?” 一聲冷哼從身側響起曲秉,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疲牵,沒想到半個月后承二,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡纲爸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年亥鸠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片识啦。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡负蚊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颓哮,到底是詐尸還是另有隱情家妆,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布冕茅,位于F島的核電站揩徊,受9級特大地震影響,放射性物質發(fā)生泄漏嵌赠。R本人自食惡果不足惜塑荒,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姜挺。 院中可真熱鬧齿税,春花似錦、人聲如沸炊豪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至牵舱,卻和暖如春串绩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芜壁。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工礁凡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慧妄。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓顷牌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親塞淹。 傳聞我的和親對象是個殘疾皇子窟蓝,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

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