【问题标题】:Animation issues with IOS 8.1IOS 8.1 的动画问题
【发布时间】:2014-11-22 03:09:34
【问题描述】:

我只是想以最简单的方式向上移动两个视图,但我不知道如何让它在 iOS8 上工作(但它在 iOS7 上工作得很好)。

我已经读到发生了变化,但无论如何我都无法让它工作......

这是我正在使用的代码:

CGRect txFrame; //我的textview的初始帧 CGRect btFrame; //我的按钮的初始帧

- (void)kbWillShow{

    [UIView animateWithDuration:0.45 animations:^{
            //Remembering the initial frames here
            txFrame = _txReason.frame;
            btFrame = _btSend.frame;
            _lbTitleReason.alpha = 0.3;
            //Animating
            _txReason.frame = CGRectMake(txFrame.origin.x, txFrame.origin.y-55, txFrame.size.width, txFrame.size.height);
            _btSend.frame = CGRectMake(btFrame.origin.x, btFrame.origin.y-75, btFrame.size.width, btFrame.size.height);

        }completion:nil];

    }

    - (void)kbWillHide{
    [UIView animateWithDuration:0.45 animations:^{
            //Putting them back to their original positions.
            _txReason.frame = txFrame;
            _btSend.frame = btFrame;
            _lbTitleReason.alpha = 1;
        }completion:nil];

    }

我尝试将“结果”位置放在完成块中,但我只是做了一个非常突然和奇怪的动作,在持续时间之后,视图传送到预期位置。 (这比做一个突然的运动并最终在与它开始时完全相同的位置更好)。

这应该很简单,我做错了什么?

【问题讨论】:

  • 您应该使用center 属性而不是frame
  • 我想我已经尝试过了,但可能不太正确,你能给我举个例子吗?
  • 示例...?你应该做同样的事情,但使用center 属性而不是frame。我不确定你真的想看哪个例子。与更改实际代码以使用 center 属性相比,编写此注释需要更多时间。 :)
  • 我看不出使用 center 属性会如何解决这个问题。这些动画是什么时候调用的,你是否启用了 AutoLayout?

标签: ios objective-c ios8 uiviewanimation


【解决方案1】:

我遇到过这个问题,答案与布局约束有关。您需要更改影响要更改的视图的布局约束的常量属性。

例如要更改宽度为NSLayoutConstraint 的视图的宽度,您可以调用constraint.constant = newWidth;,然后继续使用您的动画代码。我就是这样做的,而且效果很好。

编辑:您的动画代码很好。您无需使用 centre 属性。

【讨论】:

    猜你喜欢
    • 2012-01-19
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多