如何在iPad上实现D-Pad Xcode 5

时间:2014-09-08 16:33:18

标签: ios xcode d-pad

我已多次尝试为我的新迷宫游戏实施D-Pad,但我遇到了麻烦。我是以4 UIButtons的风格进行的,如果你按下一个,它会向上,向下,向左或向右移动另一个图像。我尝试过使用quartzcore和CAAnimation,但只知道有限的代码。

我声明了方法和按钮,但无法编写工作代码。

我在做:

-(IBAction)Up:(id)sender{

CGPoint origin1 = self.Player.center;
CGPoint target1 = CGPointMake(self.Player.center.x, self.Player.center.y-124);
CABasicAnimation *bounce1 = [CABasicAnimation animationWithKeyPath:@"position.y"];
bounce1.duration = 0.1;
bounce1.fromValue = [NSNumber numberWithInt:origin1.y];
bounce1.toValue = [NSNumber numberWithInt:target1.y];
[self.Player.layer addAnimation:bounce1 forKey:@"position"];

}

鬼魂向下移动,但立即重新开始。我被困了好几个小时,脸上可能会瞪着我,但请理解我的无聊。

1 个答案:

答案 0 :(得分:1)

在Core Animation中,有两个层次结构:一个是模型图层,另一个是表示图层。你看到的是表现层;模型层是您经常在代码中交互的内容。这种分离是有价值的,因为它可以让你创建隐式动画 - 例如设置图层的位置,它将为新点设置动画。 (但是,如果您为position指定一个值,那么您希望它是您之后立即读回的值,即使动画仍在进行中。)

当您使用addAnimation:forKey:时,您正在影响演示文稿,而不是模型。因此,在动画期间,您会看到播放器图层移动,但该图层“真的”仍然在您离开的位置。一旦动画结束,它就会从图层中移除,因此演示文稿会再次与模型匹配 - 您可以在原始位置看到它。

如果您希望模型位置也发生变化,则需要单独更改:

self.player.layer.position = CGPointMake(self.player.layer.position.x, target1.y);

您可以在添加动画后立即更新模型(您将在动画完成后看到更改),或使用完成块在动画结束时安排它。 There are subtleties to consider for either approach.

但是,如果您只想为这样的特定更改设置动画,尤其是UIView的主要图层,则在UIView上使用隐式动画API会更简单:

[UIView animateWithDuration:0.1 animations: ^{
    self.player.center = CGPointMake(self.player.center.x, target1.y);
}];

这将更新模型值并创建并运行动画,以便从当前位置移动到目标位置。


顺便说一句:它有助于遵循Cocoa代码样式约定:仅对类名或其他类型名称使用初始上限,对变量/属性/方法名称使用小写。