我遇到了问题:D。
我目前正在使用SplitViewController。一开始我想隐藏MasterView中的TableViewController。所以我决定在Storyboard中添加一个SubView到tableView中,这里会显示一个小标签。
所以在我在DetailView中做出选择并单击按钮后我想要隐藏subView并想要显示tableView。这一切都有动画。
所以这是我的代码:
在TestTableViewController.m
中-(void)AnimateView{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.1];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
fixedView.frame=CGRectMake(-500, 0,0,0);
[UIView commitAnimations];
NSLog(@"test");
在TestDetailViewController.m
中- (IBAction)attractionButton:(UIButton *)sender
{
TestTableViewController *testTableViewController = [[TestTableViewController alloc]init];
[testTableViewController AnimateView];
}
我得到NSLog"测试"但动画无效。 fixedView是我的Subview,我把它拖到头文件中,所以它是一个IBOutlet。
到目前为止,谢谢你。
答案 0 :(得分:1)
所以你似乎实例化了一个新的ViewController并试图立即执行这个动画:
TestTableViewController *testTableViewController = [[TestTableViewController alloc]init];
[testTableViewController AnimateView];
问题是你甚至没有呈现那个视图控制器(它的视图不在任何地方的屏幕上),所以你看不到任何动画是正常的。
根据我的理解,你已经在屏幕上显示了这个视图控制器的另一个实例(我是对的吗?) - 所以这是你需要使用的实例。以某种方式将其指针传递给TestDetailViewController(例如属性),然后使用该对象调用动画方法。
PS。我建议从小写字母开始命名所有方法;)
答案 1 :(得分:0)
你可以尝试的是:
[UIView animateWithDuration:0.15f animations:^{
fixedView.frame=CGRectMake(-500, 0,0,0);
}completion:^(BOOL finished){
}];
你确定你可以在没有第一个参数的情况下调用[UIView beginAnimations:....]吗?
答案 2 :(得分:0)
问题是,您没有在详细信息视图控制器中引用相同的主视图控制器。
您正在IBAction
创建另一个。
为了保留您的(原始的)主视图控制器,请在详细视图控制器中执行此操作:
创建一个ivar:
TestTableViewController *masterViewController;
然后引用它:
masterViewController = (TestTableViewController*)[[[self.splitViewController.viewControllers lastObject] viewControllers] objectAtIndex:0];
例如:
- (IBAction)attractionButton:(UIButton *)sender
{
masterViewController = (TestTableViewController*)[[[self.splitViewController.viewControllers lastObject] viewControllers] objectAtIndex:0];
[masterViewController AnimateView];
}
最后在您的AnimateView
方法中,更改以下内容:
[UIView animateWithDuration:0.1f animations:^
{
fixedView.frame = CGRectMake(-500, 0, 0, 0);
}
completion:nil];
希望这有帮助。