【问题标题】:How do I animate a button to shrink and move to a different location?如何为按钮设置动画以缩小并移动到不同的位置?
【发布时间】:2013-06-28 20:56:23
【问题描述】:

我被这个吓傻了。

我在屏幕上有一个大按钮,当我按下它时,我希望它缩小并移动到屏幕的左下角(完成后,隐藏自身并在结束位置取消隐藏具有不同功能的相同按钮)。

我有一个标签可以在与UIView animateWithDuration:animations:completion: 联系时扩展和收缩,并且使用相同的方法可以正常工作,所以我很困惑为什么这不起作用:

[UIView animateWithDuration:2.0
                 animations:^{
                      self.bigButton.frame = self.littleButton.frame;
                 }
                 completion:^(BOOL finished){
                     self.bigButton.hidden = YES;
                     self.littleButton.hidden = NO;
                 }];

执行此操作时,大按钮出现在屏幕底部(部分离开屏幕)并动画到其原始位置,然后执行完成块。

考虑到将一个帧分配给另一个帧会导致问题,我在一个独立的应用程序中重新创建了它,并使用了CGRectMake 并手动填写了值。同样的事情发生了。

我的问题:

  • 为什么这会在底角启动我的按钮并动画到其原始位置?
  • 如何使 bigButton(位置居中,大尺寸)显示为 littleButton(位置左下角,小尺寸)的动画?

【问题讨论】:

  • 大按钮和小按钮在视图层次结构中是否处于同一级别(即,两者是否具有相同的父视图)?
  • @bobnoble 是的,相同的父视图。
  • UIButton 不应该是动画的吗?
  • 我将您的动画代码插入了一个测试项目,它按照您的描述工作,所以问题不在于您提供的代码。
  • 正如您在第 2 段中描述的那样(即期望的行为),即。

标签: ios objective-c uiviewanimation uiviewanimationtransition


【解决方案1】:

使用动画的中心和边界而不是帧。 来自动画框架属性的文档:

"对此属性的更改可以动画化。但是,如果 transform 属性包含非身份变换,则 frame 属性的值是未定义的,不应修改。在这种情况下,您可以使用center 属性并使用 bounds 属性调整大小。"

【讨论】:

  • frame属性的完整解释见here
【解决方案2】:

我现在不在我的 Macbook 前,但我认为这可能是你想要让它移动的东西

 [UIView animateWithDuration:2.0
                                    options: UIViewAnimationCurveLinear
                                 animations:^{
                                     self.bigButton.center = CGMakePoint(XCOORD, YCOORD);
                                     self.bigButton.frame = CGRectMake(STARTX,STARTY,WIDTH,HEIGHT)
                                 }
                                 completion:^(BOOL finished){
                                     self.bigButton.hidden = YES;
                                     self.littleButton.hidden = NO;
                                 }];

它将移动到 XCOORD、YCOORD 点,并且按钮的大小将从左下角的点 (STARTX, STARTY) 开始,并且将是 LENGTH 宽和 HEIGHT 高。再次,我无法检查这些,因为我不在我的电脑前,但我认为这是你试图去的方向。等我回家再看看这个。

我也认为您可以使用 CGRectMake 来移动按钮并更改大小。

【讨论】:

  • 和我的代码做同样的事情。奇怪的是,当我在动画块中切换声明的顺序时,按钮会跳转到某个任意位置,然后动画到正确的位置。大小仍然没有改变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
相关资源
最近更新 更多