2

尝试制作一个小型点击游戏,其中您有一个正方形网格,需要以不同的顺序点击它们。偶尔这些方块会互相交换位置。

我认为我需要将每个正方形的位置放入一个数组中。然后,当需要移动时,从当前位置转到从数组中随机选择的位置,然后在数组中删除该位置,这样我就不会在同一个位置获得多个按钮。

不幸的是,我什至无法让 UIButtons 移动,更不用说在两个位置之间进行插值了。

目前这将移动一个按钮:

-(IBAction)button:(id)sender
{
    button.center = CGPointMake(200, 200);
}

但我不希望它那样工作,我希望它像这样工作,但它不起作用:

if (allButtonsPressed == YES)
{
    button.center = CGPointMake(200, 200);
}

如果像这样放置它甚至不会移动:

-(void)viewDidLoad
{
    [super viewDidLoad];
    button.center = CGPointMake(200, 200);
}

为清楚起见,按钮是通过 Interface Builder 添加的,所有这些情况在做其他事情时都有效,所以我猜 UIButtons 需要以特定方式移动/动画?

4

1 回答 1

13

viewDidLoad 发生在视图可见之前,因此它只会移动而不是动画。您可以尝试将其放入 viewDidAppear 方法中。

如果您希望它们动画而不是闪烁到位,您可以像这样将事物包装在 UIView 动画块中。

[UIView animateWithDuration:0.5 animations:^{
    button.center = CGPointMake(200.0, 200.0);
}];

由于您使用的是界面构建器,我假设您使用属性来跟踪按钮。如果您只使用几个设置按钮,这可以工作,但我希望在游戏中这些按钮会发生变化,因此您可能想要移动到代码或至少使用 IBOutletCollections 来跟踪按钮。

斯威夫特 3.0

UIView.animate(withDuration: 0.5) { [weak self] in
    self?.button.center = CGPoint(x: 200, y: 200)
}
于 2012-12-10T16:56:36.843 回答