gpt4 book ai didi

ios - 使 subview 从 "behind"下降到另一个 subview

转载 作者:行者123 更新时间:2023-11-28 22:02:02 24 4
gpt4 key购买 nike

UISrollView 中,我有几个以编程方式添加的 subview ,代表树中的节点:

enter image description here

每个节点的框架包括节点本身加上将它连接到其父节点的线。 (我这样做是为了促进节点线的动画。)在下图中,为其中一个节点绘制了框架:

enter image description here

当用户点击其中一个节点时,会“诞生”两个子节点。我想通过让子节点从父节点后面下降来对此进行动画处理。我的基本动画代码是:

- (void)descendFromParent
{
// Do nothing if this is root node
if (!self.parent)
return;

// Move node to parent location
self.frame = CGRectMake(self.frame.origin.x + self.parent.nodeFrame.origin.x - self.nodeFrame.origin.x,
self.frame.origin.y + self.parent.nodeFrame.origin.y - self.nodeFrame.origin.y,
self.frame.size.width, self.frame.size.height);

// Animate the move back to original location
[UIView animateWithDuration:1.0
delay:0.0
options:0
animations:^{
self.frame = self.trueFrame;
}
completion:nil];
}

(nodeFrame 是一个仅包含 View 的圆形部分的框架。)

问题当然是当子节点下降时,它(尤其是线)在父节点的顶部和上方可见:

enter image description here

我已经尝试了很多不同的方法来完成这项工作——使用 CGContextClip 等——但它们都不起作用,主要是因为 drawRect: 不是' 在动画期间调用。

我怎样才能让它工作?

最佳答案

我认为你的问题不是如何在正确的 View 层次结构中排列 View ,而是以下内容:

当你把子盘放在父盘后面后,你想让它们向下滑动,当它们滑动时,连接它们中心的边的长度应该是第一个零(当所有3个盘都在同一个地方时) , 然后应该延长直到它最终达到最终长度。

如果是这种情况,一种可能的解决方案是:

让我们调用一个圆盘的初始 x,y 中心坐标 (0,0) 和最终坐标 (X,Y)。使用通常的动画代码,很容易将子中心在时间t内移动到(X,Y)。
现在假设您有一个额外的 ImageView ,显示沿对角线的边缘。在结束位置,“边 View ”的中心在(X/2,Y/2),它的大小是(X,Y)。如果此 View 位于所有其他 View 之后,它将在最终位置连接两个磁盘。
动画现在包括 1) 将中心属性从初始位置 (0,0) 更改为 (X/2,Y/2),以及 2) 将 View 的比例(使用其 transform property )从零更改为最终大小,也在时间 t 中。
这应该可以做到。

关于ios - 使 subview 从 "behind"下降到另一个 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24894398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com