UIDynamic模擬和仿真現(xiàn)實生活中的物理現(xiàn)象

今天給大家介紹一下我們iOS開發(fā)中不太常用的UIDynamic(當(dāng)然只是對于非游戲類開發(fā)人員說不常用了),我們研究它可以做一些有趣的效果,下面我們先來看一下關(guān)于UIDynamic.

一棵里、簡單介紹

1.什么是UIDynamic

UIDynamic是從iOS 7開始引入的一種新技術(shù),隸屬于UIKit框架
可以認(rèn)為是一種物理引擎,能模擬和仿真現(xiàn)實生活中的物理現(xiàn)象
如:重力带猴、彈性碰撞等現(xiàn)象

2.物理引擎的價值

廣泛用于游戲開發(fā)熊赖,經(jīng)典成功案例是“憤怒的小鳥”
讓開發(fā)人員可以在遠(yuǎn)離物理學(xué)公式的情況下朦蕴,實現(xiàn)炫酷的物理仿真效果
提高了游戲開發(fā)效率瓶摆,產(chǎn)生更多優(yōu)秀好玩的物理仿真游戲

3.知名的2D物理引擎

Box2d
Chipmunk

二凹蜂、使用步驟

要想使用UIDynamic來實現(xiàn)物理仿真效果馍驯,大致的步驟如下
  • 創(chuàng)建一個物理仿真器(順便設(shè)置仿真范圍)
  • 創(chuàng)建相應(yīng)的物理仿真行為(順便添加物理仿真元素)
  • 將物理仿真行為添加到物理仿真器中 (開始仿真)

OK廢話不多說直接看一下能實現(xiàn)那些基本的效果

重力行為+碰撞檢測 (效果如下圖)

碰撞加自由落體.gif
重力行為+碰撞檢測 (代碼實現(xiàn))

// 當(dāng)點擊屏幕時 灰色Lable自由落體, 與綠色和黃色Lable產(chǎn)生碰撞
#import "ViewController.h"

@interface ViewController ()

// 在storyboard中拖了3個UILable控件
@property (weak, nonatomic) IBOutlet UILabel *grayLable;
@property (weak, nonatomic) IBOutlet UILabel *yellowLable;

@property (weak, nonatomic) IBOutlet UILabel *greenLable;
// 物理仿真器
@property (strong, nonatomic) UIDynamicAnimator *animator ;
@end

@implementation ViewController

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    
    //1.物理仿真器
    self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
    
    //2.1創(chuàng)建碰撞行為
    // items 設(shè)置可以碰撞元素
    UICollisionBehavior *collision = [[UICollisionBehavior alloc] initWithItems:@[self.grayLable, self.yellowLable, self.greenLable]];
    // 以 參數(shù)的view 為邊界
    collision.translatesReferenceBoundsIntoBoundary = YES;
    
    
    // 2.2創(chuàng)建“重力”仿真行為
    // items指定 可以仿真 “重力”行為元素
    UIGravityBehavior *gravity = [[UIGravityBehavior alloc] initWithItems:@[self.grayLable]];

  
    // 3.1把 重力行為 添加到 仿真器
    [self.animator addBehavior:gravity];
    // 3.2把碰撞行為 添加 到仿真器
    [self.animator addBehavior:collision];

}

@end

捕捉行為

  • 可以讓物體迅速沖到某個位置(捕捉位置)阁危,捕捉到位置之后會帶有一定的震動

  • 效果圖如下

捕捉行為1.gif
捕捉行為 (代碼實現(xiàn))
#import "ViewController.h"

@interface ViewController ()
// 在storyboard拖了一個UIImageView控件,并設(shè)置圖片
@property (weak, nonatomic) IBOutlet UIImageView *pictureView;

// 物理仿真器
@property (strong, nonatomic) UIDynamicAnimator *animatior ;
@end

@implementation ViewController

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    
    // 獲取觸摸點
    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInView:touch.view];
    
    //捕捉行為
    //1.物理仿真器
    self.animatior = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
    
    // 2.創(chuàng)建捕捉行為
    // 只要遵守UIDynamicItem協(xié)議的對象,我們稱這個對象為 “物理仿真元素”
    UISnapBehavior *snapBehavior = [[UISnapBehavior alloc] initWithItem:self.pictureView snapToPoint:point];
    
    // dampoint取值只能 0~1
    // 振幅的幅度 值越小幅度越大汰瘫,值越大幅度越小
    snapBehavior.damping = 0.3;
    
    // 3.把捕捉行為 添加到 仿真器
    [self.animatior addBehavior:snapBehavior];
    
}

UIDynamic提供了以下幾種物理仿真行為

  • UIGravityBehavior:重力行為

  • UICollisionBehavior:碰撞行為

  • UISnapBehavior:捕捉行為

  • UIPushBehavior:推動行為

  • UIAttachmentBehavior:附著行為

  • UIDynamicItemBehavior:動力元素行為

剩余的幾種行為,大家如果感興趣的話可以研究一下!!!

注:一些行為的屬性沒給大家介紹,如果覺得效果不夠強烈(或行為方向等),到頭文件找一找屬性自己試一下,這樣也有助于大家學(xué)習(xí).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狂打,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子混弥,更是在濱河造成了極大的恐慌趴乡,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝗拿,死亡現(xiàn)場離奇詭異晾捏,居然都是意外死亡,警方通過查閱死者的電腦和手機哀托,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門惦辛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仓手,你說我怎么就攤上這事胖齐。” “怎么了嗽冒?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵市怎,是天一觀的道長。 經(jīng)常有香客問我辛慰,道長,這世上最難降的妖魔是什么干像? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任帅腌,我火速辦了婚禮,結(jié)果婚禮上麻汰,老公的妹妹穿的比我還像新娘速客。我一直安慰自己,他們只是感情好五鲫,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布溺职。 她就那樣靜靜地躺著,像睡著了一般位喂。 火紅的嫁衣襯著肌膚如雪浪耘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天塑崖,我揣著相機與錄音七冲,去河邊找鬼。 笑死规婆,一個胖子當(dāng)著我的面吹牛澜躺,可吹牛的內(nèi)容都是我干的蝉稳。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼掘鄙,長吁一口氣:“原來是場噩夢啊……” “哼耘戚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起操漠,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤收津,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后颅夺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朋截,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年吧黄,在試婚紗的時候發(fā)現(xiàn)自己被綠了部服。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡拗慨,死狀恐怖廓八,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赵抢,我是刑警寧澤剧蹂,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站烦却,受9級特大地震影響宠叼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜其爵,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一冒冬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摩渺,春花似錦简烤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绰姻,卻和暖如春枉侧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背狂芋。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工棵逊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人银酗。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓辆影,卻偏偏與公主長得像徒像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蛙讥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

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

  • 本文中所有代碼演示均有GitHub源碼锯蛀,點擊下載 UIDynamic簡介 簡介:UIKit動力學(xué)最大的特點是將現(xiàn)實...
    si1ence閱讀 10,215評論 8 79
  • ————————————【 iOS—UIDynamic 】————————————— 一、簡單介紹 1.什么是UI...
    北辰青閱讀 1,617評論 0 1
  • 簡介 什么是UIDynamic UIDynamic是從iOS 7開始引入的一種新技術(shù)次慢,隸屬于UIKit框架 可以認(rèn)...
    JonesCxy閱讀 193評論 0 1
  • 目錄 ** UIView 動畫 ** ** Core Animation ** ** FaceBook POP動畫...
    方向_4d0d閱讀 1,594評論 0 3
  • 發(fā)信人:叁肆伍,信區(qū): Secondhand標(biāo)題: [X校區(qū)出售]吉他一把旁涤,50出發(fā)信站:飲水思源(2016年04...
    叁肆伍Zoe閱讀 419評論 1 1