【发布时间】:2014-02-13 08:21:19
【问题描述】:
我有两个 UIViews(我的错误是 UIView 和 UIButton),我正在同时制作动画。我最初有一个视图和一个 containerView,它可以很好地制作动画并且像魅力一样工作。
现在只有我的一个 UIViews 会在 animateWithDuration 中移动/动画,即使通过调试另一个视图的框架说它处于它不在的位置。
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);
切换视图移动正常,但tabButton 视图没有动画或移动。奇怪的是,“After”和“AfterAnimation”调试代码都返回了相同的值,这表明框架确实已经移动了。当toggle 是UIView 而它可以作为UIContainerView 工作时,是否有特定的原因不起作用?
请注意,如果我删除该行
self.toggle.frame = rect;
tabButton 会正确动画,但如果我移动toggle,tabButton 将不会移动,无论它是在动画块中的第一个还是第二个。
编辑:我尝试将它们移动到单独的块中并更改中心点而不是框架,但无济于事。如果toggle 视图移动,tabButton 似乎不会移动。
编辑 2:图片证据。{
在以下截图中,tabButton bg 为绿色,toggle bg 为红色。
上图:初始位置(toggle 在屏幕外)正确位置
上图:问题toggle是正确的tabButton不是
上图:当self.toggle.frame = rect 被注释掉时(tabButton 正确,toggle 不正确)
}
编辑 3:比我担心的还要糟糕。{
我已经做了一些测试,即使我将 toggle 更改为动画块以使其成为即时的东西,tabButton 仍将仍然没有动画。这让我觉得tabButton 可能根本不喜欢toggle 的观点和/或我自己,所以不会仅仅为了惹恼我而采取行动。
}
编辑 4:{
如果我将 tabButton 动画更改为 tabButton.frame = CGRectMake(10,10,100,100),视图会立即捕捉到该位置,并在动画持续时间的同时动画回到其原始位置。
}
我最好添加更多簿记/TLDR 信息以防不清楚。
toggle是ToggleDraw的一个实例,它是我创建的UIView的子视图。tabButton是UIButton,它是我的 IB viewController 的一部分,也是该类的属性toggle和tabButton都是self.view的子视图动画将单独工作,无需修改矩形的逻辑,但如果它们同时动画则将无法工作
toggle动画似乎优先于tabButton动画,无论顺序如何
【问题讨论】:
-
至少作为一个临时的hack,如果你把它们放在不同的块中会发生什么?
-
除非切换行被注释掉,否则仍然无法工作
-
有趣。你能检查一下这两个按钮的属性有什么不同吗?
-
只有一个是按钮(tabButton),另一个是我从笔尖(切换)加载的视图。除此之外,属性或多或少是相同的。
-
如果你不改变它的大小,试着移动它的中心点?
self.toggleButton.center
标签: ios objective-c animation uiview