UIDynamic是從IOS7開始引入的一種新技術,隸屬于UIKit框架,我們可以認為是一種物理引擎能模擬和仿真現實生活中的物理現象,比如重力,彈性碰撞等。
可以讓開發人員遠離物理公式的情況下,實現一些物理仿真效果。
這里簡單介紹一下重力,碰撞,捕捉的用法。
先介紹一下使用的大致步驟
一,重力與碰撞
提前在StoryBoard準備兩個UIView,一個紅色,一個藍色。藍色在紅色的下方,保證紅色下落能碰到藍色的view。
1 //創建物理仿真器 2 UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view]; 3 self.animator = animator; //強引用animator,否則代碼塊執行完成后,將被釋放 4 5 //創建重力行為 6 UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[self.redView]]; 7 8 //設置一些屬性(可以不設置,不設則都為默認) 9 gravityBehavior.gravityDirection = CGVectorMake(0, 1); //重力方向10 gravityBehavior.angle = M_PI*0.5; //重力方向11 gravityBehavior.magnitude = 0.5; //重力加速度,1代表加速度是(每秒100個點)12 13 //把重力行為行為添加到仿真器14 [animator addBehavior:gravityBehavior];15 16 17 //創建碰撞行為18 UICollisionBehavior *collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[self.redView,self.blueView]];19 20 //設置碰撞邊界,不設置就會飛出屏幕,設置就會在屏幕邊框處產生碰撞效果21 collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;22 23 //將碰撞行為加入物理仿真器24 [animator addBehavior:collisionBehavior];
代碼執行后,就能看到紅色的view下落,并撞擊藍色的View了。
二,捕捉行為
1 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 2 { 3 //獲取觸摸點 4 UITouch *touch = [touches anyObject]; 5 CGPoint point = [touch locationInView:touch.view]; 6 7 //創建仿真仿真器 8 UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view]; 9 self.animator = animator; //仿真器10 11 //創建捕捉行為12 UISnapBehavior *snapBehavior = [[UISnapBehavior alloc] initWithItem:self.redView snapToPoint:point];13 14 //設置反彈系數(反彈幅度越大,值越大,反彈幅度越小)15 snapBehavior.damping = 0.5;16 17 //將行為添加到仿真器18 [animator addBehavior:snapBehavior];19 20 }
運行一下,點擊屏幕,可以發現,紅色的view就很調皮的跟著你的手指移動啦
新聞熱點
疑難解答