vin*_*thp 1 objective-c uiview uiviewanimation ios
在我的应用程序中,我使用的UIView是包含UITableView,Buttons并Labels在其中.它创建使用Storyboard.当用户单击导航栏按钮时,UIView将显示从顶部到特定高度的动画,如果再次单击它,则会隐藏带有动画的UIView(从该高度到顶部).同样的UIActionView.
如果没有记录,它可以正常工作UITableView.但如果它有任何记录,则调用[self hideBasket]UIView时会从视图底部显示到顶部(Not Hidden).
//隐藏篮子代码
-(void)hideBasket{
/*Finished Hiding the Basket
[self.view sendSubviewToBack:_shoppingCartView];
[_shoppingCartView setHidden:YES];
_isShoppingCartSeen = NO;*/
CGRect basketFrame = _shoppingCartView.frame;
basketFrame.origin.y = -basketFrame.size.height;
[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{
_shoppingCartView.frame = basketFrame;
} completion:^(BOOL finished) {
// Finished Hiding the Basket
//[self.view sendSubviewToBack:_shoppingCartView];
// [_shoppingCartView setHidden:YES];
_isShoppingCartSeen = NO;
}];
Run Code Online (Sandbox Code Playgroud)
//显示篮子代码
-(void)showBasket{
/*[self.view bringSubviewToFront:_shoppingCartView];
[_shoppingCartView setHidden:NO];
_isShoppingCartSeen = YES;*/
CGRect basketFrame = _shoppingCartView.frame;
basketFrame.origin.y = 0;
[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{
_shoppingCartView.frame = basketFrame;
} completion:^(BOOL finished) {
// Finished Showing the Basket
[self.view bringSubviewToFront:_shoppingCartView];
[_shoppingCartView setHidden:NO];
_isShoppingCartSeen = YES;
}];
}
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
使用自动布局,您应该为约束设置动画,而不是更改对象的框架.
我已经嘲笑了一个粗略的例子,说明从哪里开始使用约束,这应该可以解决你的问题
首先,您需要设置篮子视图的约束
每个对象必须至少设置4个约束才能正确设置.
请参阅下面的屏幕截图,按下我选择的视图底部的约束图标来设置视图的宽度和高度,再加上左边距离约束.
然后,您需要将空间设置为superview顶部,请参阅第二个屏幕截图.

将约束设置为superview的顶部

设置约束后,设置CTRL将顶部空间拖动到superview属性到您的头文件,如下面的屏幕截图所示.(您需要在视图中设置约束以适应您的表格对象等),

现在已经设置好了,请用以下内容替换您的代码,它应该可以正常工作
-(void)hideBasket{
self.topVerticalSpaceConstraint.constant = -312;
[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{
[self.view layoutIfNeeded];
} completion:^(BOOL finished) {
}];
Run Code Online (Sandbox Code Playgroud)
}
- (无效)showBasket {
self.topVerticalSpaceConstraint.constant = 0;
[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{
[self.view layoutIfNeeded];
} completion:^(BOOL finished) {
}];
Run Code Online (Sandbox Code Playgroud)
}
请注意我只是手动将常量设置为我组成的虚拟视图的大小,但您当然会将其更改为视图的大小等.
请记住,您的每个视图/对象理想情况下都应设置其约束,尤其是下拉视图中的UITableview.在UIView中设置表格的高度,宽度以及顶部和左侧空间限制就足够了.
如果希望视图在第一次加载时隐藏,则viewDidload将约束设置为-valueOfHeightOfBasket
我希望这有帮助.
| 归档时间: |
|
| 查看次数: |
642 次 |
| 最近记录: |