在两点之间移动UIButton的正确方法



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

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

不幸的是,我甚至无法让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);
}

为了清楚起见,该按钮是通过界面生成器添加的,所有这些情况在执行其他操作时都有效,所以我猜 UIButtons 需要以特定方式移动/动画?

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)
}

最新更新