ios - 使一个 UIView 跟踪另一个约束的动画

标签 ios animation uiview autolayout

我正在尝试学习如何使用 AutoLayout 约束来制作动画。

我有两个 UIView,如下所示:

enter image description here

当我点击“向上”按钮时,我希望结果看起来像这样。我希望红色矩形保持相同大小,但保持固定在灰色矩形的顶部并继续行驶,如下所示:

enter image description here

相反,我得到了这个:

enter image description here

这是我的代码:

- (IBAction)upButton:(UIButton *)sender
{
    self.heightConstraint.constant = 20;
    [UIView animateWithDuration:1.0
                     animations:^{
                         [self.view layoutIfNeeded];
                     } completion:nil];
}

- (IBAction)downButton:(UIButton *)sender
{
    self.heightConstraint.constant = 438;
    [UIView animateWithDuration:1.0
                     animations:^{
                         [self.view layoutIfNeeded];
                     } completion:nil];

}

约束情况如下所示(截图——我不知道如何从文档大纲中复制实际列表)。相关的动画约束(self.heightConstraint)高亮显示:

enter image description here

我承认我发现自动布局约束有点像打地鼠游戏。有人可以帮我了解我应该怎么做吗?

最佳答案

设置约束时,您需要考虑各个项目如何相互关联,并记住布局引擎需要能够计算每个项目的顶部、左侧和宽度/高度。太多的约束可能与约束不足一样产生问题。

在您的情况下,您希望固定红色框的大小,因此我会对其宽度和高度设置约束。您还希望其相对于屏幕左边缘的位置是固定的,因此为 super View 设置前导空间约束。您希望灰色框的空间是固定的,因此请为灰色框设置尾随空格约束。最后,您希望红色框的顶部与灰色框相同,因此在 IB 中选择橙色框,按住 Control 键拖动到灰色框并从弹出窗口中选择“顶部”。

对于灰色框,设置父 View 的尾部空间约束和父 View 的底部空间约束(它已经有红色框的前导空间约束)。最后,设置高度约束或顶部空间约束以进行监督。这是您要设置动画的约束,因此为其创建一个 IBOutlet 并根据需要在代码中更改它。

关于ios - 使一个 UIView 跟踪另一个约束的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31105719/

相关文章:

ios - VBPieChart-removeFromSuperView 不起作用(隐藏图表)

ios - ContinueTrackingWithTouch 不会被连续调用

iOS使用CGContext画线的质量比SpriteKit中的SKShapeNode差很多

ios - iOS本地化不适用于63个以上的文件

ios - 向 Alamofire 请求添加 header (使用临时 session )

CSS3 折叠与延迟一起工作

javascript - 垂直轮播循环中的 jQuery mouseenter/hover stop 动画

javascript - 动画播放状态 Javascript

uiview - UIKit:扩展一个圆形的 UIView

uiview - 如何更改 View 单击 UIAlertViewController 中的按钮