我正在尝试在我的 iOS 应用程序中创建一个动画,其中一个新视图从左侧滑到屏幕上,而主视图滑到右侧为其腾出空间。主视图是我的视图控制器顶视图的子视图,而滑入的侧视图是从单独的 xib 文件加载的。
如果它是相关的,这是我加载侧视图的代码,从我的主视图控制器的 viewDidLoad 方法调用:
sideViewController = [[SideViewController alloc] init];
[sideViewController loadView];
sideView = sideViewController.topView;
[self.view addSubview:sideView];
sideView.hidden = YES;
sideView.frame = CGRectMake(-200, 0, 200, 460);
这是被调用来为两个视图设置动画的代码:
sideView.hidden = NO;
[UIView animateWithDuration:0.25f
animations:^{
mainView.frame = CGRectMake(200, 0, 320, 460);
sideView.frame = CGRectMake(0, 0, 200, 460);
}];
这看起来很简单。但由于某种原因,只有 sideView 动画 - mainView 不会移动到任何地方。更令人困惑的是,如果我注释掉动画块中移动 sideView 的行,mainView 的动画就会开始工作。
有谁知道出了什么问题?从我读过的所有搜索和文档中,我所做的应该可以正常工作。我原以为会是一个简单的动画,却变成了数小时的挫败感。任何帮助将非常感激!
编辑:
根据郭路川的建议,我尝试为两个 UIView 的不同属性设置动画。大多数都得到了相同的结果,尽管动画它们的两个变换属性几乎都起作用了。在这种情况下,两个 UIView 都动画了,但是 mainView 只是做错了事:它的动画从不同的位置开始并在错误的位置结束。看起来它正在执行我指示它执行的翻译,但从向量计算中表示的这个位置开始:
starting_point - 0.5 * total_translation
意味着它结束于:
starting_point + 0.5 * total_translation
但是,sideView 的动画效果正确。
这该死的烦人。我没有意识到以这种方式在 iOS 上执行动画是如此糟糕。接下来我要尝试的是使用 CABasicAnimation,虽然我很不高兴,但我不得不尝试使用如此低级的 API 来完成如此简单的事情。