iOS在动画视图中设置autolyout符合所有设备

时间:2015-02-08 07:07:59

标签: ios animation autolayout

我有一个关于iOS中autoLayout的问题。

我在很长一段时间内都在研究,但我还是没有达到我的需要。 / \

我正在构建一个动画视图(容器视图)。容器视图中有一个单击按钮。

初始状态如下图所示: enter image description here

单击按钮,容器视图将使用动画(幻灯片)到底部按钮上部。

容器将覆盖白色部分(底部按钮上部)。

最后的愿望如下:

enter image description here

然后单击容器视图中的按钮。它会将视图折叠回初始状态。

我可以编写代码来控制有关包含视图的约束。

 - (IBAction)slideBtnAction:(id)sender {
     if (isContainerOpen) {
    // 100 is for user click region
    // it is slide view action (close)
    [self replaceTopConstraintOnView:self.containerView withConstant: -self.containerView.frame.size.height + 40];
} else {
    // it is slide view action(open)
         [self replaceTopConstraintOnView:self.containerView withConstant:           self.containerView.frame.size.height - _btmBtn1.frame.size.height - 40];
}

[self animateConstraints];
isContainerOpen = !isContainerOpen;

 }

 - (void)replaceTopConstraintOnView:(UIView *)view withConstant:(float)constant
 {
     [self.view.constraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *constraint, NSUInteger idx, BOOL *stop) {
    if ((constraint.firstItem == view) && (constraint.firstAttribute == NSLayoutAttributeTop)) {
        constraint.constant = constant;
    }
}];
 }

 - (void)animateConstraints
 {
[UIView animateWithDuration:0.5 animations:^{
    [self.view layoutIfNeeded];
}];
 }

但是工作站是容器视图固定高度,动画无法滑动到底部上方位置的正确位置(覆盖白色部分)。

我希望容器视图可以符合所有iOS设备。所以容器视图将是动态高度。

但我不知道如何在幻灯片中设置容器视图高度。(我在这些代码中实现了修复高度。)

有谁可以帮助我如何实现这种效果?

因为我在故事板中设置了一些自动布局。

所以我将我的简单项目提升到github [here]

请给我一些提示和导师,非常感谢..

---------------------编辑-----------

表示@YuviGr

如果我更改约束(使用你的建议)

 // it is slide view action(open)
 [self replaceTopConstraintOnView:self.containerView
   withConstant: self.containerView.bounds.size.height - _btmBtn1.bounds.size.height];

 - (void)replaceTopConstraintOnView:(UIView *)view withConstant:(float)constant
 {
     [self.view.constraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *constraint, NSUInteger idx, BOOL *stop) {
    if ((constraint.firstItem == view) && (constraint.firstAttribute == NSLayoutAttributeTop)) {
        constraint.constant = constant;
    }
}];

}

单击按钮时,视图无法正确显示位置。 像这些 enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

首先,您需要创建一个对要设置动画的约束的引用,在这种情况下,我认为是containerView的底部约束。

只需控制 - 从故事板拖动到控制器以创建IBOutlat(如果您不知道该做什么,请查看本教程Link

进入容器视图可见的状态(第二个图像),您可以计算视图的高度并减去按钮高度

constraint = self.view.bounds.size.height - button.bounds.size.height; 

对于隐形(第一张图片),你必须使用常数去除你想要的高度