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

时间:2012-12-10 16:46:41

标签: xcode uibutton interpolation

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

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

不幸的是,我甚至无法移动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需要以特定方式移动/动画?

1 个答案:

答案 0 :(得分:12)

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

如果您希望它们动画而不是闪烁到位,您可以将内容包装在UIView动画块中。

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

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

Swift 3.0

UIView.animate(withDuration: 0.5) { [weak self] in
    self?.button.center = CGPoint(x: 200, y: 200)
}