gpt4 book ai didi

ios - UIView 图层动画后显示不正确

转载 作者:行者123 更新时间:2023-11-29 11:24:32 26 4
gpt4 key购买 nike

我有一个关于 UIViews 和 Core Animation 的问题我不明白。这是我想要做的:

  • 通过将小 View 作为其 subview 之一,将小 View 显示在大 View 上方。
  • 当我单击该 View 内的按钮时,该 View 应最小化并移动到指定的 CGRect。
  • 然后 View 从其父 View 中删除。

我第一次呈现、最小化并移动和删除 View 时,一切正常。但是当我再次呈现 View 时,它显示在修改后的位置(即使它应该通过调用设置在原始位置 theView.frame = CGRectMake(600.0, 160.0, 339.0, 327.0);),而包含在 View 中的所有不同的响应器元素(按钮、 TextView 等)就像它们在原始位置一样。这就像 View 和图层因动画而变得不同步,我不知道如何让它们恢复同步。

self.view.layer.frame = CGRectMake(600.0, 160.0, 339.0, 327.0); 这样的东西并没有得到任何正确的东西。

我的最小化和移动动画代码如下:

    [CATransaction flush];
CABasicAnimation *scale, *translateX, *translateY;
CAAnimationGroup *group = [CAAnimationGroup animation];
group.delegate = delegate;
group.duration = duration;

scale = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
translateX = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
translateY = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"];

scale.toValue = [NSNumber numberWithFloat:0.13];
translateX.toValue = [NSNumber numberWithFloat:137.0];
translateY.toValue = [NSNumber numberWithFloat:-290.0];

group.animations = [NSArray arrayWithObjects: scale, translateX, translateY, nil];
group.fillMode = kCAFillModeForwards;
group.removedOnCompletion = NO;

[theView.layer addAnimation:group forKey:@"MyAnimation"];

如何让图层在动画结束后回到 View ?

最佳答案

如果删除这两行会发生什么?

group.fillMode = kCAFillModeForwards; 
group.removedOnCompletion = NO;

您用这些行告诉核心动画的是,您希望它在动画的前向(最终)状态中继续显示。同时,您实际上并没有在图层上设置变换以具有您用于动画的属性。这会使事情看起来不同步。

现在,您将遇到的问题是,删除这些线会导致您的转换在动画完成后恢复到起始状态。您需要做的实际上是在图层上设置变换,以便它们在动画完成时保持其位置。

另一种选择是保留这两行,然后实际明确地从图层中删除动画,而不是像您在准备恢复到原始状态时提到的那样设置图层框架。你这样做:

[theView.layer removeAnimationForKey:@"MyAnimation"];

-removedOnCompletion 属性告诉层不要在动画完成时移除它。现在您可以明确删除它,它应该恢复原状。

HTH。

关于ios - UIView 图层动画后显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3086516/

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