我有两个 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”调试代码返回相同的值,这表明帧确实移动了。当 toggle
是 UIView
而它可以作为 UIContainerView
工作时,是否有特定的原因这将不起作用?请注意,如果我删除该行
self.toggle.frame = rect;
tabButton
将正确动画,但如果我移动 toggle
, tabButton
将不会移动,无论它是动画块中的第一个还是第二个。编辑:我尝试将它们移动到单独的块中并更改中心点而不是框架,但无济于事。好像
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 信息。
toggle
是 ToggleDraw
的一个实例,它是我创建的 UIView
的 subview 。 tabButton
是一个 UIButton
,它是我的 IB viewController 的一部分,也是 toggle
和 tabButton
都是 self.view
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/