我用这个优秀教程开球一个小项目,我的工作涉及到物理学:应用Box2D的物理学的UIView与CALayer的
http://www.cocoanetics.com/2010/05/physics-101-uikit-app-with-box2d-for-gravity/
基本上,它会创建一个世界,应用物理学的B2D到你拥有的任何视图。非常简单,它的工作原理。但是,我试图通过使用CALayers来应用相同的逻辑,即我以编程方式创建图层,将它们添加到主视图并尝试对它们进行动画处理。
用于创建层的示例代码:
CALayer *layer = [CALayer layer];
layer.backgroundColor = [UIColor blackColor].CGColor;
layer.frame = CGRectMake(50, 100, 30, 30);
layer.name = @"square";
[self.view.layer addSublayer:layer];
而在股票的应用物理学:
CALayer *oneLayer = (CALayer *)b->GetUserData();
// y Position subtracted because of flipped coordinate system
CGPoint newCenter = CGPointMake(b->GetPosition().x * PTM_RATIO, self.view.bounds.size.height - b->GetPosition().y * PTM_RATIO);
oneLayer.position = newCenter;
CGAffineTransform transform = CGAffineTransformMakeRotation(- b->GetAngle());
oneLayer.affineTransform = transform;
请注意,我适应了仿射变换调用的CALayer类。
我检查并仔细检查了变量,数字似乎相符。我得到的是来自CALayer动画的奇怪反弹,以及来自UIView的完美动画。任何经验丰富的Box2D和UIKit来回答为什么会发生这种情况?
你能否解释一下“怪异反弹” – erkanyildiz 2012-08-16 16:35:50
此:http://youtu.be/OpTXuqIgiPE - 黑色是CALayer的,绿色是UIView.The CALayer在击中“地面”之前弹跳。一个原因导致我认为维度等。是正确的,这是因为CALayer最终会停止与底部接触地面的弹跳。 – hcabral 2012-08-16 17:30:07