【问题标题】:Text Field Returns to Original Location after Running Animation运行动画后文本字段返回到原始位置
【发布时间】:2015-01-12 23:11:42
【问题描述】:

我试图在按下按钮时将文本字段向右移动。它工作正常,但是当我单击另一个文本字段或任何其他元素时,文本字段会重新出现在其当前位置。我浏览了互联网,发现当我没有启用自动布局时它可以工作,但是我需要自动布局来设置可变位置。有什么建议吗?这是移动盒子的方法:

- (IBAction)EnterInfo:(id)sender {
    CGRect newFrame = _UsernameField.frame;
    newFrame.origin.x += 500;    // shift right by 500pts
    [UIView animateWithDuration:1.0
                     animations:^{
                         _UsernameField.frame = newFrame;
                     }];
}

最后一个问题的新代码:

- (IBAction)EnterInfo:(id)sender {
    [UIView animateWithDuration:1.0
                     animations:^{
                         _usernameX.constant = 130;
                     }];
}

【问题讨论】:

    标签: ios objective-c animation


    【解决方案1】:

    如果您启用了自动布局,则无法像那样操作框架。您需要引用 NSLayoutConstraint 并更新常量。

    像这样:

    myXConstraint.constant = originalX + 500;
    

    编辑——然后你的动画块应该是这样的:

    [UIView animateWithDuration:0.5 animations:^{
        [self.view layoutIfNeeded];
    }];
    

    【讨论】:

    • 那么我将如何访问 _UsernameField 的 x 约束?我在上面找不到 .constraint 属性,而且我对约束的经验非常少
    • 如果您在 xib/storyboard 中设置约束,您可以为约束创建 IBOutlet,就像为任何其他 UI 元素创建 IBOutlet 一样。如果您没有在视图中显式设置任何约束,现在是时候执行此操作,然后为您的 x 位置约束创建出口。
    • 现在更有意义了!像这样的自动约束方法是动画的最佳/标准方法吗?感谢您的回答,我会在允许时将其设置为解决方案。
    • 是的,自从自动布局问世以来,这就是在屏幕上操作视图的方式。您在帖子中使用它的方式是我们过去在 iOS 6 之前的做法(或者对我来说是 iOS 7,因为 Auto Layout 在刚推出时非常粗糙)。
    • 有道理,我一定会按照您的描述进行设置。我的最后一个问题是约束更新现在可以正常工作并保持其新位置,但是过渡不再是动画的。使用新代码编辑原始帖子
    猜你喜欢
    • 1970-01-01
    • 2015-11-19
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 2014-11-04
    • 1970-01-01
    • 2015-12-24
    相关资源
    最近更新 更多