【问题标题】:Animating UIView frame with constraints带有约束的动画 UIView 框架
【发布时间】:2013-07-11 16:44:58
【问题描述】:

我在 UIView 中有一个元素,它有一个约束,它应该始终距离视图底部 10 个像素。然后我试图为这个视图的高度设置动画,使它看起来从屏幕上滑下来。根据约束,元素应始终距视图底部 10 个像素。当我像这样添加视图时,这是正确的......

printView *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"printView"];
    [self addChildViewController:vc];
    vc.view.frame = CGRectMake(0, 60, vc.view.frame.size.width, HEIGHT);
    vc.view.layer.masksToBounds = FALSE;
    [vc.view.layer setShadowOffset:CGSizeMake(0.0, 5.0)];
    [vc.view.layer setShadowOpacity:0.8];
    vc.view.layer.shadowColor = [[UIColor blackColor] CGColor];
    vc.view.layer.shadowRadius = 8;
    vc.view.clipsToBounds = TRUE;
    [self.view insertSubview:vc.view aboveSubview:docWebView];

我可以将 HEIGHT 更改为我想要的任何值,并且元素始终距离视图底部 10 像素。当我尝试为高度设置动画时出现问题

printView *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"printView"];
    [self addChildViewController:vc];
    vc.view.frame = CGRectMake(0, 60, vc.view.frame.size.width, 0);
    vc.view.layer.masksToBounds = FALSE;
    [vc.view.layer setShadowOffset:CGSizeMake(0.0, 5.0)];
    [vc.view.layer setShadowOpacity:0.8];
    vc.view.layer.shadowColor = [[UIColor blackColor] CGColor];
    vc.view.layer.shadowRadius = 8;
    vc.view.clipsToBounds = TRUE;
    [self.view insertSubview:vc.view aboveSubview:docWebView];
    [UIView animateWithDuration:5.0 animations:^{
        vc.view.frame = CGRectMake(0, 60, vc.view.frame.size.width, 200);
        [self.view setNeedsDisplay];
    }];

不再遵守约束,并且视图不会随着元素始终从底部滑入 10 像素,看起来元素正在被覆盖,因为元素不随视图移动。我希望我能很好地解释这一点。换句话说,我想要一张地图被拉下的效果,但看起来地图已经在那里,而覆盖它的一张纸正在被拉开。感谢您的帮助。

【问题讨论】:

    标签: ios objective-c uiview constraints autolayout


    【解决方案1】:

    使用约束时,您不应该设置框架,而应该调整约束。当您最初设置约束时,您应该为高度约束创建一个 IBOutlet,然后在动画块中为其常量参数设置动画。如果你有一个名为 heightCon 的高度约束,你可以这样做:

    [UIView animateWithDuration:5.0 animations:^{
            self.heightCon.constant = 200
            [self.view layoutIfNeeded];
        }];
    

    我不确定您的结构,self.view 可能必须改为 vc.view。

    编辑后:

    这是为高度约束设置动画的方法,但我不确定这是否是您想要完成所需外观的方法。我不太确定你的最后一段是什么意思。如果您要获得地图被拉下的效果,似乎底部约束需要动画或消除。

    【讨论】:

    • 天哪。我不知道可以为约束创建一个出口。太棒了!
    • 说你有 4 个标签,从上到下,你将如何使用自动布局定位这些标签。我的意思是你有 3 种约束:第一个标签和视图顶部,2 个标签之间,最后一个标签和视图底部。我将如何指定这些约束,以便它不会过多地拉伸它们之间的空间,也不会拉伸标签本身的高度?我会给出基于百分比的空间/距离/高度还是只是固定数量(对于 iPhone5、6、plus、iPad mini、iPad Air、iPad Pro 来说是不同的)。 我只想要一个粗略的想法,不需要代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2015-02-06
    • 1970-01-01
    • 2014-01-27
    • 2016-11-29
    • 1970-01-01
    相关资源
    最近更新 更多