【发布时间】:2012-08-13 01:24:08
【问题描述】:
我使用这个优秀的教程启动了一个我正在从事的涉及物理学的小项目:
http://www.cocoanetics.com/2010/05/physics-101-uikit-app-with-box2d-for-gravity/
基本上,它创建了一个世界并将 B2D 的物理原理应用于您拥有的任何视图。非常简单,而且有效。但是,我尝试使用 CALayers 应用相同的逻辑,即,我以编程方式创建图层,将它们添加到主 view.layer 并尝试为它们设置动画。
创建图层的示例代码:
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 经验的人来回答为什么会发生这种情况?
【问题讨论】:
-
你能解释一下“奇怪的反弹”
-
这个:youtu.be/OpTXuqIgiPE - 黑色是 CALayer,绿色是 UIView。CALayer 在撞到“地面”之前会反弹。一个原因使我认为尺寸等。是正确的,因为 CALayer 最终会在框架底部接触地面时停止弹跳。
标签: ios uiview uikit box2d calayer