【问题标题】:Correct Way To Move UIButton Between Two Points?在两点之间移动 UIButton 的正确方法?
【发布时间】:2012-12-10 16:46:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: xcode uibutton interpolation


    【解决方案1】:

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

    【讨论】:

    • 这似乎有效,但当我按下另一个按钮时,它会弹回原来的位置。我可能有一些杂散代码这样做,但只是为了检查,您的解决方案是简单地动画到一个位置,还是动画到该位置并将其设置为新位置?
    • 此代码将设置然后动画。因此,如果您要在动画中间检查它,您甚至会在它出现之前获得新帧。但除非您指定 UIViewAnimationOptionAutoReverse,否则它将保留在那里。所以我怀疑你确实有一些杂散代码。
    • 如果您查看 UIView 文档,实际上有很多 UIViewAnimation 选项,包括完成块和从任何位置开始或将动画排队的选项。
    • 所以动作在一个 -(void)moveButtons 中,由一个 -(IBAction)submitButton 调用,它与 [self moveButtons] 一起使用,但是如果以后有任何其他 [self commands] 它会中断在行动中?
    • 我的问题可能是打开了自动布局。现在似乎一切正常。
    猜你喜欢
    • 2015-01-20
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多