【问题标题】:Applying Box2D physics to UIView vs. CALayer将 Box2D 物理应用于 UIView 与 CALayer
【发布时间】: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


【解决方案1】:

UIViews 不同,CALayers 具有内置的隐式动画。每次更改可动画属性的值时,都会引入一个简短的动画。您必须将代码包装在 CATransaction 中并禁用操作以消除这种影响:

[CATransaction begin];
[CATransaction setDisableActions:YES]; // implicit animations get disabled

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;

[CATransaction commit];

【讨论】:

    猜你喜欢
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    相关资源
    最近更新 更多