我有两个 UIViews(我不好,它是一个 UIView 和一个 UIButton ),我正在同时制作动画。我最初有一个 View 和一个容器 View ,它们可以很好地进行动画处理并且像魅力一样工作。

现在只有我的一个 UIViews 会在 animateWithDuration 中移动/动画,即使通过调试另一个 View 的框架说它处于它不在的位置。

    CGRect rect = self.toggle.frame;
    CGRect tabRect = self.tabButton.frame;
    rect.origin.x = rect.origin.x - rect.size.width;
    NSLog(@"%f Before",tabRect.origin.x);
    tabRect.origin.x = tabRect.origin.x - rect.size.width;
    NSLog(@"%f After", tabRect.origin.x);
    [UIView animateWithDuration:0.3 animations:^{  // animate the following:
        self.toggle.frame = rect; // move to new location
        self.tabButton.frame = tabRect;
    }];
    NSLog(@"%f AfterAnimation", tabButton.frame.origin.x);

切换 View 移动得很好,但 tabButton View 没有动画或移动。奇怪的是,“After”和“AfterAnimation”调试代码返回相同的值,这表明帧确实移动了。当 toggleUIView 而它可以作为 UIContainerView 工作时,是否有特定的原因这将不起作用?

请注意,如果我删除该行
self.toggle.frame = rect;
tabButton 将正确动画,但如果我移动 toggletabButton 将不会移动,无论它是动画块中的第一个还是第二个。

编辑:我尝试将它们移动到单独的块中并更改中心点而不是框架,但无济于事。好像toggle View 移动了,tabButton 就不动了。

编辑 2:图片证据。{

在以下屏幕截图中,tabButton bg 为绿色,toggle bg 为红色。

上图:初始位置(toggle 离屏)正确位置

上图:问题 toggle 是正确的 tabButton 不是

上图:当 self.toggle.frame = rect 被注释掉时(tabButton 正确,toggle 不正确)
}

编辑 3:这比我担心的还要糟糕。{

我做了一些更多的测试,即使我从动画块中取出 toggle 更改以使其成为即时事物,tabButton 仍然不会动画。这让我认为 tabButton 可能只是从根本上不喜欢 toggle View 和/或我自己,所以不会只是为了冒犯我而采取行动。

}

编辑 4:{

如果我将 tabButton 动画更改为 tabButton.frame = CGRectMake(10,10,100,100),则 View 会立即捕捉到该位置并在动画持续时间的同时动画回到其原始位置。

}

如果事情不清楚,我最好添加更多簿记/TLDR 信息。
  • toggleToggleDraw 的一个实例,它是我创建的 UIView 的 subview 。
  • tabButton 是一个 UIButton,它是我的 IB viewController 的一部分,也是
  • 类的一个属性
  • toggletabButton 都是 self.view
  • 的 subview
  • 动画将单独工作,无需修改 rect 的逻辑,但如果它们同时进行动画,则不会工作
  • toggle 动画似乎优先于 tabButton 动画,无论
  • 的顺序如何

    最佳答案

    我在 IB 中创建的 UIView 的动画有问题(动画不是从 View 的当前位置开始,而是在初始位置结束)。

    将 layoutIfNeeded() 发送到动画块之前的底层 View 后,一切正常:

    self.view.layoutIfNeeded()
    UIView.animateWithDuration(0.5) { () -> Void in
    ...
    

    关于ios - UIView 不改变 animateWithDuration 中的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21297112/

    10-10 00:42