动画UIView的子视图在动画期间不保持其约束

时间:2015-10-18 17:11:21

标签: ios swift animation uiview

我正在动画自定义UIView进行扩展,如下面的gif所示(红色视图)。 单击打开/关闭按钮时,我希望左侧图标垂直保留在其超级视图的中心。如下图所示,单击该按钮后,图标将弹出到动画完成后的位置。 按钮也是如此,但它没有明显隐藏而无法点击它。

我也希望中间的UILabel能够设置其动画大小,而不是在您点击“关闭”后立即弹出最小高度。

在故事板中我设置了图标和按钮以使中心与超级视图对齐,这对我来说似乎是实现我想要的正确方法。我假设当我为超级视图设置动画时,子视图将在动画期间保持居中,但是它们会立即移动到正确的点,但是在动画完成后。

gif

我的动画代码:

UIView.animateWithDuration(0.4, animations: { () -> Void in

    var rect = self.frame; //The current frame, to change
    let oldHeight = self.frame.size.height as CGFloat

    let newSize = self.sizeForBanner() //Get the CGSize for the big banner.

    if(self.isBig) //Animate to big size
    {
        //Put the new height and origin for the large version of the view
        rect.size.height = newSize.height;
        rect.origin.y -= (rect.size.height - oldHeight)

    }else{ //Animate to small size

        //Put the new height and origin for the small version of the view

        rect.size.height = self.minimalHeight;
        rect.origin.y += oldHeight-rect.size.height
    }

        //Set the new variables
        self.frame = rect;

    }) { (Bool) -> Void in
        //Completion
}

当superview动画时,我如何/如何更改以使图标和按钮保持居中?...

1 个答案:

答案 0 :(得分:2)

您需要启用Clip Subviews。这是UIViews默认禁用的值。

如果您通过Interface Builder创建了视图,请转到Attributes Inspector并选中Clip Subviews复选框:

enter image description here

如果您通过代码创建了视图,请使用:

view.clipsToBounds = true