首页 > 解决方案 > 如何在 UIView 中定位和动画子视图?

问题描述

AUIViewControler包含 a UIScrollView,其中包含三个不同的页面。启动时,中心页面显示了几个其他视图,代表两列内容。这些内容视图是 ScrollView 的子视图,能够在不同页面之间自由移动。

如果用户滚动到左侧页面,一些内容视图(模型中的绿色视图)也应该移动到该页面(动画),而其他在移动之前不可见的视图(例如底部的绿色圆圈) )。动画/移动的进度应该由滚动位置/进度控制。

如果用户滚动回中心,一切都将显示在开头。向右滚动时,其他视图(红色)移动到右侧页面(动画)并且其他视图变得可见。

如何解决?

当然,它可以scrollViewDidScroll:用来检测 ScrollView 的变化,计算偏移量并通过更新它们的约束来移动视图。但这绝对是一场噩梦。

视图不会线性移动,而是改变彼此的相对位置,等等。通过改变一些约束常数来做到这一点是行不通的,不是吗?

那么如何实现这样的视图移动以及如何为它们设置动画呢?

如果我可以为起始位置定义一个布局/约束集,为左侧页面定义一个布局,为右侧页面定义一个布局,并且 iOS SDK 以某种方式动画这些布局之间的过渡,那将是完美的。

这可以通过在UIView动画块内的不同约束集之间切换来完成,但这只会允许从“布局中心”到“布局左侧”的完全动画。但在这种情况下,动画应该由滚动控制:如果左侧页面滚动 50% 到其最终位置,则内容视图在其中心布局和左侧布局之间也应该是 50%。

这有可能吗?

在此处输入图像描述

编辑:

最后一张图片的中心视图中的红色框不应该存在。这些框移到了右页。

标签: iosobjective-cuiviewuiviewanimation

解决方案


推荐阅读