UIDynamic是從IOS7開始引入的一種新技術,隸屬於UIKit框架,我們可以認為是一種物理引擎能模擬和模擬現實生活中的物理現象,比如重力,彈性碰撞等。 可以讓開發人員遠離物理公式的情況下,實現一些物理模擬效果。 這裡簡單介紹一下重力,碰撞,捕捉的用法。 先介紹一下使用的大致步驟 創建物理模擬器 ...
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就很調皮的跟著你的手指移動啦