【问题标题】:How define location of CALayer in the UIView during movement移动过程中如何在 UIView 中定义 CALayer 的位置
【发布时间】:2016-02-18 13:16:48
【问题描述】:

我想做一个应用程序,苹果从树上掉下来,用户可以用篮子接住它。当我触摸屏幕时,篮子开始移动,所以它朝那个方向移动——但速度很慢。为此,我使用

-(void) touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    UITouch* t = [touches anyObject];
    CGPoint p = [t locationInView:self.view];
    if(p.y <self.view.frame.size.height-50)
    {
        p.y = self.view.frame.size.height-50;
    }

    CABasicAnimation *basketmovementAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
    [basketmovementAnimation setFromValue:[NSValue valueWithCGPoint:[[self.basketLayer presentationLayer]position]]];
    [basketmovementAnimation setDuration:3.0];

    [self.basketLayer setPosition:p];
    [self.basketLayer addAnimation:basketmovementAnimation forKey:@"basket"];
}

那么问题是如何在运动过程中获取“篮子”的坐标?我需要它来与落下的苹果的坐标进行比较。 提前致谢

【问题讨论】:

  • 这就是像 SpriteKit 这样的游戏框架的用途。虽然您可以使用 UIKit 创建游戏,但 SpriteKit 可以让您确定呈现给用户的每一帧的视图位置,并让您定义苹果和篮子等对象之间的碰撞交互。
  • @ZeMoon 谢谢,但目前我没有使用这些框架,只是CABasicAnimation,在这种情况下如何定义它?

标签: ios objective-c core-animation calayer cabasicanimation


【解决方案1】:

CALayer 对此有一个方法。

- (id)presentationLayer

来自 CALayer 类参考

此方法返回的图层对象提供了一个关闭 当前显示在屏幕上的图层的近似值。 当动画正在进行时,您可以检索此对象并 使用它来获取这些动画的当前值。

【讨论】:

  • 谢谢我会尝试使用这个方法。
猜你喜欢
  • 2020-10-10
  • 2015-11-25
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2019-04-18
相关资源
最近更新 更多