UIKit力學(xué)(Dynamics)

UIKit力學(xué)是基于Box2D開源物理引擎

  • UIGravityBehavior 重力
  • UICollisionBehavior 碰撞午绳,可以碰撞檢測(cè)
  • UIAttachmentBehavior 吸附,互相吸附。兩個(gè)物體之間的距離是剛性的
  • UIPushBehavior 推呼寸,向某個(gè)方向運(yùn)動(dòng)
  • UISnapBehavior 甩稳捆,朝某個(gè)目標(biāo)點(diǎn)甩出
  • UIDynamicItemBehavior 行為限制火的。它含有的設(shè)置行為力學(xué)的參數(shù):
    • density:密度:如果是一個(gè)100 * 100的物體壶愤,密度為1.0,作用力是1.0馏鹤,加速度是100點(diǎn)/s2
    • elasticity:彈力系數(shù)征椒,取值范圍是0-1,0表示沒有反彈湃累,1.0表示完全彈性碰撞
  • friction:摩擦系數(shù)勃救, 0表示沒有摩擦力,1.0表示摩擦力很強(qiáng)脱茉,需要摩擦力很大可以大于1.0
  • resistance:阻力剪芥,物體運(yùn)動(dòng)的時(shí)候垄开,在線性方向的阻力琴许,0.0沒有阻力,CGFLOAT_MAX表示最大阻力
  • allowsRotation:是否允許旋轉(zhuǎn)
  • angularResistance:角阻力:物體旋轉(zhuǎn)的時(shí)候溉躲,旋轉(zhuǎn)方向的阻力

用代碼說話

重力榜田、碰撞益兄、吸附、推

先看效果:


在SB中創(chuàng)建一個(gè)盒子箭券、一個(gè)小圓球净捅、一根木棍


Paste_Image.png
/**
 *  盒子重力加速度下降
 *  盒子在碰到棍子后彈起翻轉(zhuǎn)
 *  盒子碰到球吸附
 */

@interface ViewController () <UICollisionBehaviorDelegate>{
    BOOL _firstContact; // 記錄方塊是否是第一次碰撞
}
@property (weak, nonatomic) IBOutlet UIView *box; // 盒子
@property (weak, nonatomic) IBOutlet UIImageView *line; // 木棍
@property (weak, nonatomic) IBOutlet UIImageView *ball; // 球


@property (nonatomic, retain) UIDynamicAnimator * animator;
@property (nonatomic, retain) UIGravityBehavior * gravity; // 重力
@property (nonatomic, retain) UICollisionBehavior * collision; // 碰撞
@property (nonatomic, retain) UIAttachmentBehavior * attachment; // 吸附

@end

@implementation
ViewController

- (void)viewDidLoad {
    _ball.layer.masksToBounds = YES;
    _ball.layer.cornerRadius = _ball.frame.size.width / 2;

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

    // 重力
     self.gravity= [[UIGravityBehavior alloc] initWithItems:@[_box]];

    // 設(shè)置重力的方向
//    CGVector gravityDirection = {0.0, 5}; // 如果y為負(fù)向上運(yùn)動(dòng),值越大速度越大
//    _gravity.gravityDirection = gravityDirection;
    [_animator addBehavior:_gravity]; // 添加到animator中

    // 碰撞
    self.collision= [[UICollisionBehavior alloc] initWithItems:@[_box]];
    _collision.translatesReferenceBoundsIntoBoundary= YES; // 檢測(cè)發(fā)生碰撞
    [_animator addBehavior:_collision];

    // 檢測(cè)是否與其他視圖邊界進(jìn)行碰撞
    [_collision addBoundaryWithIdentifier:@"collision"fromPoint:_line.frame.origin toPoint:CGPointMake(_line.frame.origin.x+ _line.frame.size.width, _line.frame.origin.y)];

    _collision.collisionDelegate = self; // 設(shè)置代理

    // 參數(shù)
    UIDynamicItemBehavior* item = [[UIDynamicItemBehavior alloc] initWithItems:@[_box]];
    item.elasticity= 0.5;
    [_animator addBehavior:item];
}

// 檢測(cè)到碰撞后進(jìn)行的處理
- (void)collisionBehavior:(UICollisionBehavior*)behavior beganContactForItem:(id<UIDynamicItem>)item
withBoundaryIdentifier:(id<NSCopying>)identifier atPoint:(CGPoint)p{

    if( !_firstContact) {
        _firstContact = YES;

        // 吸附辩块,小球吸附在盒子里
        self.attachment = [[UIAttachmentBehavior alloc] initWithItem:_ball attachedToItem:_box];
        [self.animator addBehavior:_attachment];

        // 推
        UIPushBehavior * push
= [[UIPushBehavior alloc] initWithItems:@[_box]mode:UIPushBehaviorModeInstantaneous];
        CGVector pushDir = {0.5, -0.5};
        push.pushDirection =
pushDir;
        push.magnitude = 5.0;
        [_animator addBehavior:push];
    }
}
@end

Demo在這里

效果:


在SB為view添加一個(gè)點(diǎn)擊手勢(shì)


/**
 *  盒子停在界面中蛔六,當(dāng)觸摸屏幕,盒子會(huì)先加速后減速到觸摸點(diǎn)
 */
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *box; // 盒子

@property (nonatomic, retain) UIDynamicAnimator * animator;
@property (nonatomic, retain) UISnapBehavior * snap; // 甩
@end

@implementation ViewController

- (void)viewDidLoad {
    self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
}
- (IBAction)handleSnapGesture:(UITapGestureRecognizer *)sender {
    // 移除甩行為
    [_animator removeBehavior:_snap];
    
    // 添加甩行為
    CGPoint point = [sender locationInView:self.view]; // 得到觸摸的點(diǎn)
    self.snap = [[UISnapBehavior alloc] initWithItem:_box snapToPoint:point];
    [_animator addBehavior:_snap];
}

Demo在這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末废亭,一起剝皮案震驚了整個(gè)濱河市国章,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豆村,老刑警劉巖液兽,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異掌动,居然都是意外死亡四啰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門粗恢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柑晒,“玉大人,你說我怎么就攤上這事适滓《仄” “怎么了?”我有些...
    開封第一講書人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵凭迹,是天一觀的道長罚屋。 經(jīng)常有香客問我,道長嗅绸,這世上最難降的妖魔是什么脾猛? 我笑而不...
    開封第一講書人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮鱼鸠,結(jié)果婚禮上猛拴,老公的妹妹穿的比我還像新娘。我一直安慰自己蚀狰,他們只是感情好愉昆,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著麻蹋,像睡著了一般跛溉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,807評(píng)論 1 314
  • 那天芳室,我揣著相機(jī)與錄音专肪,去河邊找鬼。 笑死堪侯,一個(gè)胖子當(dāng)著我的面吹牛嚎尤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伍宦,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼芽死,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了次洼?” 一聲冷哼從身側(cè)響起收奔,我...
    開封第一講書人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎滓玖,沒想到半個(gè)月后坪哄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡势篡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年翩肌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片禁悠。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡念祭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出碍侦,到底是詐尸還是另有隱情粱坤,我是刑警寧澤,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布瓷产,位于F島的核電站站玄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏濒旦。R本人自食惡果不足惜株旷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尔邓。 院中可真熱鬧晾剖,春花似錦、人聲如沸梯嗽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灯节。三九已至循头,卻和暖如春缠俺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贷岸。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留磷雇,地道東北人偿警。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像唯笙,于是被迫代替她去往敵國和親螟蒸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

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

  • UIKit動(dòng)力學(xué)最大的特點(diǎn)是將現(xiàn)實(shí)世界動(dòng)力驅(qū)動(dòng)的動(dòng)畫引入了UIKit崩掘,比如重力七嫌,鉸鏈連接,碰撞苞慢,懸掛等效果诵原,即將2...
    BarleyZ閱讀 1,291評(píng)論 0 49
  • iOS 7增加了UIKit Dynamics庫,其集成于UIKit框架中挽放,將2D物理引擎引入了UIKit绍赛,提供了以...
    pro648閱讀 2,813評(píng)論 2 14
  • 《圍城》里比較意外的是方鴻漸與孫柔嘉的婚姻。 孫柔嘉愛方鴻漸嗎辑畦?方是她改變命運(yùn)最便捷的棋子吗蚌,卻未必是她掏心掏肺死去...
    江南玉笛閱讀 566評(píng)論 5 5
  • 經(jīng)過幾日舟車勞頓,他們終于到了藥王谷纯出,此時(shí)的古月北看上去消瘦了很多蚯妇,也許只有仇恨才足以支撐他快悲傷過度的軀體。 微...
    想最烈的酒閱讀 302評(píng)論 0 2
  • 于濤和路梅十年沒見了暂筝,他們是網(wǎng)戀的五年前箩言。路梅深愛著于濤,于濤總是找理由不見路梅焕襟。最后路梅忍不住來到北京分扎,在一個(gè)寒...
    臭余閱讀 193評(píng)論 0 1