iOS 重力感應(yīng)粒子碰撞效果(UIDynamic + CoreMotion)

因 : 無聊看到開發(fā)群里說到“掌上英雄聯(lián)盟”重力感應(yīng)粒子碰撞效果,邊新生想法動(dòng)手實(shí)現(xiàn)一下??????
>>>>>>>>>>首先仔細(xì)觀察效果
IMG_0644.PNG
>>>>>>>>>>個(gè)人認(rèn)為有2種實(shí)現(xiàn)方式

1 代碼 UIDynamic + CoreMotion 就可以實(shí)現(xiàn)了
2 底層放一個(gè)webView,通過透明網(wǎng)頁形式展現(xiàn)(個(gè)人猜測(cè))

>>>>>>>>>> 代碼實(shí)現(xiàn)須知
1 了解重力感應(yīng)機(jī)制

{
通過手機(jī)陀螺儀的加速度判斷(自行百度了解弄企,資料很多)
}

2 了解UIDynamic(物理碰撞)機(jī)制

{
1 重力行為(UIGravityBehavior),
2 推動(dòng)行為(UIPushBehavior),
3 物體的屬性包括彈性等(UIDynamicItemBehavior),
4邊緣范圍(UICollisionBehavior)
}(自行百度了解囱怕,資料很多)

>>>>>>>>>> 主要代碼
1 重力感應(yīng)
 if ([self.mManager isAccelerometerAvailable] == YES) {
        //回調(diào)會(huì)一直調(diào)用,建議獲取到就調(diào)用下面的停止方法好啰,需要再重新開始,當(dāng)然如果需求是實(shí)時(shí)不間斷的話可以等離開頁面之后再stop
        [self.mManager setAccelerometerUpdateInterval:updateInterval];
        [self.mManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error)
         {
             double x = accelerometerData.acceleration.x;
             double y = accelerometerData.acceleration.y;
             if (fabs(y) >= fabs(x))
             {
                 if (y >= 0){
                     NSLog(@"Down");
                 }
                 else{
                     NSLog(@"Portrait");
                 }
             }
             else
             {
                 if (x >= 0){
                     NSLog(@"Right");
                 }
                 else{
                     //Left
                 }
             }
             
             // 1. 計(jì)算偏移量
             CGPoint offset = CGPointMake(accelerometerData.acceleration.x,-accelerometerData.acceleration.y);
             // 2. 計(jì)算角度
             CGFloat angle = atan2(offset.y, offset.x);
             // 3. 計(jì)算距離
             CGFloat distance = hypot(offset.y, offset.x);
             // 4. 設(shè)置推動(dòng)的大小爆惧、角度
             self.baseView.push.magnitude = distance;
             self.baseView.push.angle = angle;
             // 5. 使單次推行為有效
             self.baseView.push.active = YES;
         }];
    }
2 UIDynamic
// 初始化仿真者
        UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:self];
       self.boxView.center = CGPointMake(190, 0);
        
        // 1. 添加重力行為
        UIGravityBehavior *gravity = [[UIGravityBehavior alloc] initWithItems:@[self.boxView]];
        
        [self.animator addBehavior:gravity];
        
        // 2. 邊緣檢測(cè)
        // 如果把紅色view 也加邊緣檢測(cè),則碰撞后紅色View 也會(huì)被碰掉侄旬,因此要手動(dòng)添加邊界
        UICollisionBehavior *collision = [[UICollisionBehavior alloc] initWithItems:@[self.boxView]];
        // 讓碰撞的行為生效
        collision.translatesReferenceBoundsIntoBoundary = YES;
        collision.collisionDelegate = self;
        
        // 5. 物體的屬性行為
        UIDynamicItemBehavior *item = [[UIDynamicItemBehavior alloc] initWithItems:@[self.boxView,self.boxViewOther,self.boxView3,self.boxView4,self.boxView5]];
        
        // 設(shè)置物體彈性蚌本,振幅
        item.elasticity = 0.5;
        [self.animator addBehavior:item];
        
        // 設(shè)置物體推動(dòng)
        self.push = [[UIPushBehavior alloc] initWithItems:@[self.boxView];

>>>>>>>>>> 最終效果
test.gif
>>>>>>>>>>視頻轉(zhuǎn)gif有點(diǎn)問題,????
>>>>>>>>>>附上github地址

https://github.com/wutao66/UIDynamicTest

>>>>>>>>>>同時(shí)感謝??各個(gè)資源的介紹
>>>>>>>>>>最終實(shí)現(xiàn)只是個(gè)模型,方便大家做各個(gè)部分的調(diào)整復(fù)用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市塞耕,隨后出現(xiàn)的幾起案子蚀腿,更是在濱河造成了極大的恐慌,老刑警劉巖扫外,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莉钙,死亡現(xiàn)場(chǎng)離奇詭異纱注,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)胆胰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門狞贱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜀涨,你說我怎么就攤上這事瞎嬉。” “怎么了厚柳?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵氧枣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我别垮,道長(zhǎng)便监,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任碳想,我火速辦了婚禮烧董,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胧奔。我一直安慰自己逊移,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布龙填。 她就那樣靜靜地躺著胳泉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪岩遗。 梳的紋絲不亂的頭發(fā)上扇商,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音宿礁,去河邊找鬼案铺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛窘拯,可吹牛的內(nèi)容都是我干的红且。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼涤姊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼暇番!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起思喊,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤壁酬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舆乔,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岳服,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了希俩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吊宋。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖颜武,靈堂內(nèi)的尸體忽然破棺而出璃搜,到底是詐尸還是另有隱情,我是刑警寧澤鳞上,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布这吻,位于F島的核電站,受9級(jí)特大地震影響篙议,放射性物質(zhì)發(fā)生泄漏唾糯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一鬼贱、第九天 我趴在偏房一處隱蔽的房頂上張望移怯。 院中可真熱鬧,春花似錦吩愧、人聲如沸芋酌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至同云,卻和暖如春糖权,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炸站。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工星澳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人旱易。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓禁偎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親阀坏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子如暖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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

  • 本文中所有代碼演示均有GitHub源碼,點(diǎn)擊下載 UIDynamic簡(jiǎn)介 簡(jiǎn)介:UIKit動(dòng)力學(xué)最大的特點(diǎn)是將現(xiàn)實(shí)...
    si1ence閱讀 10,203評(píng)論 8 79
  • 第88屆奧斯卡頒獎(jiǎng)典禮枷遂,最搶眼獎(jiǎng)項(xiàng)不是最佳影片爭(zhēng)奪戰(zhàn)樱衷,而是“萬人迷”萊昂納多·迪卡普里奧,小李子連續(xù)第五次獲得奧斯...
    William_YAO閱讀 400評(píng)論 0 0
  • 柔五月酒唉,小柔或者柔柔矩桂,提醒自柔軟的力量,柔和姿態(tài)痪伦。五行缺木和土耍鬓,柔字含木,五字含土流妻。五是陽牲蜀,月是陰,是明的一半绅这。 ...
    行一館閱讀 173評(píng)論 0 0
  • 愿你享有月白風(fēng)清的淡定涣达,人生如菊的從容。若你是男人证薇,“看盡人間興廢事度苔,不曾富貴不曾窮”,愿你面對(duì)生命的苦難和挑戰(zhàn)時(shí)...
    zcwfeng閱讀 210評(píng)論 0 1