目标C如何通过单击按钮为子视图设置动画

时间:2014-06-19 08:18:56

标签: ios objective-c subview

我遇到了问题: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。

到目前为止,谢谢你。

3 个答案:

答案 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];

希望这有帮助。