2015-10-18 66 views
2

我正在动画自定义UIView以展开,如下面的gif(红色视图)所示。 单击打开/关闭按钮时,我想让左侧图标垂直位于其俯视图的中央。如下图所示,只要我点击按钮,图标就会弹出到动画完成后的位置。 这个按钮也是一样,但是它不像它被暂时隐藏起来一样显而易见。动画UIView的子视图不会在动画期间保持其约束

我也希望中间的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 
} 

如何/我该怎么改变,使图标和按钮时,上海华动画留中心..

+0

你解决它?我面临着同样的问题... –

+0

@AviTsadok是的,我认为是这样!我现在没有这里的代码,但我可以稍后再查看,并将其写为答案。我认为这是启用'view.clipsToBounds'(或称之为)和其他一些变量。并且一定要有你的约束 – Sti

+0

@AviTsadok其实,我没有这个代码了。我们最终使用了稍微不同的设计,但并不是因为这个问题。我相当肯定,我设法通过改变约束来改变这个工作,并改变了一些值,比如'clipsToBounds'等等。我记得当我意识到我必须在* superview *中将'clipsToBounds'设置为'true'而不是实际视图(或者其他方式,或者某种东西)时,会出现一个'aha'时刻。重要的是哪个物体具有这些特性,这与我所想的相反。祝你好运,并对不起:) – Sti

回答

2

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

如果您是透过Interface Builder的观点去Attributes Inspector并检查Clip Subviews复选框:

enter image description here

如果您创建通过代码视图,然后使用:

view.clipsToBounds = true