UIDynamic-吸附-重力-碰撞-物理仿真動(dòng)畫

現(xiàn)實(shí)生活中:

運(yùn)動(dòng)場(chǎng)==物理仿真器

跑步==物理仿真行為

人==仿真元素

創(chuàng)建步驟:

// 1.創(chuàng)建物理仿真器,并且指定仿真范圍

// 2.創(chuàng)建物理仿真行為,并且指定仿真元素

// 3.將物理仿真行為添加到仿真器中

Demo:

#pragma mark -懶加載,創(chuàng)建物理仿真器,并且指定仿真范圍

- (UIDynamicAnimator*)dynamicAni

{

? ?if(!_dynamicAni) {

? ? ?// 1.創(chuàng)建物理仿真器,并且指定仿真范圍

? ? ?_dynamicAni= [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

? ? ?}

? ?return_dynamicAni;

}

#pragma mark -點(diǎn)擊屏幕響應(yīng)事件

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)event

{

? ? ?//獲取當(dāng)前觸摸手指,以及位置

? ? ?//UITouch *touch = [touches anyObject];

? ? ?//CGPoint point = [touch locationInView:self.view];

? ? ?//重力

? ? ?[self gravity];

? ? ?//碰撞

? ? ?//[self collision];

? ? ?//吸附

? ? ?//[self snapWithPoint:point];

}

#pragma mark -重力

- (void)gravity

{

? ? ?// 1.創(chuàng)建物理仿真器,并且指定仿真范圍

? ? ?// 2.創(chuàng)建物理仿真行為,并且指定仿真元素

? ? ?UIGravityBehavior*gravity = [[UIGravityBehavior alloc] initWithItems:@[self.purView]];

? ? ?//設(shè)置重力的方向

? ? ?//gravity.gravityDirection = CGVectorMake(1, 0);

? ? ?//gravity.gravityDirection = CGVectorMake(0, -1);

? ? ?//gravity.gravityDirection = CGVectorMake(1, 1);

? ? ?//設(shè)置重力的角度

? ? ?//gravity.angle = M_PI_2;

? ? ?//設(shè)置重力的加速度

? ? ?//gravity.magnitude = 100.0;

? ? ?// 3.將物理仿真行為添加到仿真器中

? ? ?[self.dynamicAni addBehavior:gravity];

}

#pragma mark -碰撞,有重力方能碰撞

- (void)collision

{

? ? ?// 1.創(chuàng)建物理仿真器,并且指定仿真范圍

? ? ?// 2.創(chuàng)建物理仿真行為,并且指定仿真元素

? ? ?// 2.1創(chuàng)建重力仿真行為

? ? ?UIGravityBehavior*gravity = [[UIGravityBehavior alloc] initWithItems:@[self.purView]];

? ? ?gravity.magnitude=3;

? ? ?// 2.2創(chuàng)建碰撞仿真行為

? ? ?UICollisionBehavior*collision = [[UICollisionBehavior alloc] initWithItems:@[self.purView,self.redView]];

? ? ?//碰撞模式

? ? ?//collision.collisionMode = UICollisionBehaviorModeItems;

? ? ?//是否設(shè)置碰撞的邊界,默認(rèn)邊界為物理仿真器邊界

? ? ?//collision.translatesReferenceBoundsIntoBoundary = YES;

? ? ?//添加直線邊界

? ? ?//[collision addBoundaryWithIdentifier:@"line" fromPoint:CGPointMake(0, 400) ?toPoint:CGPointMake(320, 500)];

? ? ?//添加圖形的邊界,貝賽爾曲線邊界

? ? ?UIBezierPath*path = [UIBezierPath bezierPathWithOvalInRect:self.view.frame];

[collision addBoundaryWithIdentifier:@"rect" forPath:path];

? ? ?// 3.將物理仿真行為添加到仿真器中

? ? ?[self.dynamicAni addBehavior:gravity];

? ? ?[self.dynamicAni addBehavior:collision];

}

#pragma mark -吸附

- (void)snapWithPoint:(CGPoint)point

{

? ? ?// 1.創(chuàng)建物理仿真器,并且指定仿真范圍

? ? ?// 2.創(chuàng)建物理仿真行為,并且指定仿真元素

? ? ?UISnapBehavior*snap = [[UISnapBehavior alloc] initWithItem:self.purViewsnapToPoint:point];

? ? ?//設(shè)置吸附行為的"減震", 0.0~1.0

? ? ?snap.damping=.5;

? ? ?//注意:使用吸附行為,默認(rèn)只有一次,如若想要多次必須移除之前的行為再重新添加

? ? ?[self.dynamicAni removeAllBehaviors];

? ? ?// 3.將物理仿真行為添加到仿真器中

? ? ?[self.dynamicAni addBehavior:snap];

}

#pragma mark - QZone

- (void)QZoneAnimation

{

? ? ?UIButton *addButton = [UIButton buttonWithType:UIButtonTypeContactAdd];

? ? ?addButton.center=CGPointMake(kScreenW/2,kScreenH-50);

? ? ?[addButton addTarget:self action:@selector(addButtonAction) forControlEvents:UIControlEventTouchUpInside];

? ? ?[self.view addSubview:addButton];

? ? ?//初始化彈出的控件

? ? ?UIView*view1 = [[UIView alloc] initWithFrame:CGRectMake(0,0,20,20)];

? ? ?view1.backgroundColor= [UIColor greenColor];

? ? ?view1.center=CGPointMake(kScreenW/2,kScreenH-50);

? ? ?view1.tag=101;

? ? ?UIView*view2 = [[UIView alloc] initWithFrame:CGRectMake(0,0,20,20)];

? ? ?view2.backgroundColor= [UIColor purpleColor];

? ? ?view2.center=CGPointMake(kScreenW/2,kScreenH-50);

? ? ?view2.tag=102;

? ? ?UIView*view3 = [[UIView alloc] initWithFrame:CGRectMake(0,0,20,20)];

? ? ?view3.backgroundColor= [UIColor cyanColor];

? ? ?view3.center=CGPointMake(kScreenW/2,kScreenH-50);

? ? ?view3.tag=103;

? ? ?[self.view insertSubview:view1 belowSubview:addButton];

? ? ?[self.view insertSubview:view2 belowSubview:addButton];?

? ? ?[self.view insertSubview:view3 belowSubview:addButton];

}

#pragma mark - addButtonAction

- (void)addButtonAction

{

? ? ?//吸附

? ? ?//計(jì)算坐標(biāo)

? ? ?CGPoint point1 =CGPointMake(kScreenW/2-50,kScreenH-60-50);

? ? ?CGPoint point2 =CGPointMake(kScreenW/2,kScreenH-60-100);

? ? ?CGPoint point3 =CGPointMake(kScreenW/2+50,kScreenH-60-50);

? ? ?CGPoint point =CGPointMake(kScreenW/2,kScreenH-50);

? ? ?UIView *view1 = (UIView*)[self.view viewWithTag:101];

? ? ?UIView *view2 = (UIView*)[self.view viewWithTag:102];

? ? ?UIView *view3 = (UIView*)[self.view viewWithTag:103];

? ? ?// 2.物理仿真行為

? ? ?UISnapBehavior*snap1 = [[UISnapBehavior alloc] initWithItem:view1 ?snapToPoint:point1];

? ? ?UISnapBehavior*snap2 = [[UISnapBehavior alloc] initWithItem:view2 ?snapToPoint:point2];

? ? ?UISnapBehavior*snap3 = [[UISnapBehavior alloc] initWithItem:view3 ?snapToPoint:point3];

? ? ?UISnapBehavior*snap4 = [[UISnapBehavior alloc] initWithItem:view1 ?snapToPoint:point];

? ? ?UISnapBehavior*snap5 = [[UISnapBehavior alloc] initWithItem:view2 ?snapToPoint:point];

? ? ?UISnapBehavior*snap6 = [[UISnapBehavior alloc] initWithItem:view3 ?snapToPoint:point];

? ? ?if(_isSnap) {

? ? ? ?[self.dynamicAniremoveAllBehaviors];

? ? ? ?// 3.將物理仿真行為添加到仿真器中

? ? ? ?[self.dynamicAni addBehavior:snap1];

? ? ? ?[self.dynamicAni addBehavior:snap2];

? ? ? ?[self.dynamicAni addBehavior:snap3];

? ? ?}else{

? ? ? ?[self.dynamicAni removeAllBehaviors];

? ? ? ?snap4.damping=.8;

? ? ? ?snap5.damping=.8;

? ? ? ?snap6.damping=.8;

? ? ? ?// 3.將物理仿真行為添加到仿真器中

? ? ? ?[self.dynamicAni addBehavior:snap4];

? ? ? ?[self.dynamicAni addBehavior:snap5];

? ? ? ?[self.dynamicAni addBehavior:snap6];

? ? ?}

? ? ?_isSnap= !_isSnap;

}


重力:

碰撞:

吸附:

分散:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拖吼,一起剝皮案震驚了整個(gè)濱河市彻磁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挖垛,老刑警劉巖敬尺,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闰围,死亡現(xiàn)場(chǎng)離奇詭異删窒,居然都是意外死亡础倍,警方通過查閱死者的電腦和手機(jī)猾蒂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門球订,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝌以,“玉大人蜻直,你說我怎么就攤上這事校仑∮独担” “怎么了困曙?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵表伦,是天一觀的道長。 經(jīng)常有香客問我慷丽,道長蹦哼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任要糊,我火速辦了婚禮纲熏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锄俄。我一直安慰自己局劲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布奶赠。 她就那樣靜靜地躺著鱼填,像睡著了一般。 火紅的嫁衣襯著肌膚如雪车柠。 梳的紋絲不亂的頭發(fā)上剔氏,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音竹祷,去河邊找鬼谈跛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛塑陵,可吹牛的內(nèi)容都是我干的感憾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼令花,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼阻桅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起兼都,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤嫂沉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后扮碧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趟章,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杏糙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚓土。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宏侍。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蜀漆,靈堂內(nèi)的尸體忽然破棺而出谅河,到底是詐尸還是另有隱情,我是刑警寧澤确丢,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布绷耍,位于F島的核電站,受9級(jí)特大地震影響蠕嫁,放射性物質(zhì)發(fā)生泄漏锨天。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一剃毒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧搂赋,春花似錦赘阀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宋欺,卻和暖如春轰豆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背齿诞。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工酸休, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人祷杈。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓斑司,卻偏偏與公主長得像,于是被迫代替她去往敵國和親但汞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宿刮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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

  • 本文中所有代碼演示均有GitHub源碼,點(diǎn)擊下載 UIDynamic簡(jiǎn)介 簡(jiǎn)介:UIKit動(dòng)力學(xué)最大的特點(diǎn)是將現(xiàn)實(shí)...
    si1ence閱讀 10,213評(píng)論 8 79
  • UIDynamic-iOS中的物理引擎 創(chuàng)建一個(gè)物理仿真器 設(shè)置仿真范圍 創(chuàng)建相應(yīng)的物理仿真行為 添加物理仿真元素...
    Nirvana_icy閱讀 2,167評(píng)論 0 10
  • 1, 掉落(重力)行為--UIGravityBehavior 2私蕾,碰撞行為--UICollisionBehavio...
    漁夫閱讀 341評(píng)論 1 2
  • 初識(shí)iOS APP開發(fā)#### 在iOS APP開發(fā)中, main函數(shù)仍是程序的入口和出口, 但main函數(shù)不需要...
    DeanYan閱讀 6,138評(píng)論 0 3
  • 人生中很多人擦肩而過 最終總會(huì)有一個(gè)為你停留 不管多遠(yuǎn) 無論在哪里 毋庸置疑 好的事情總會(huì)來臨 而當(dāng)它來的時(shí)候 也...
    長春今生有約婚禮閱讀 306評(píng)論 0 0