繁体   English   中英

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

[英]Objective C How to animate Subview with click in Button

我有一个问题:D。

我目前正在使用SplitViewController。 首先,我想在MasterView中隐藏TableViewController。 因此,我决定在情节提要中将SubView添加到tableView中,其中将显示一个小标签。

因此,在DetailView中做出选择并单击Button之后,我想隐藏子视图并显示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。

到目前为止谢谢你。

因此,您似乎实例化了一个新的ViewController并尝试立即执行此动画:

TestTableViewController *testTableViewController = [[TestTableViewController alloc]init];
[testTableViewController AnimateView];

问题是您甚至没有显示该视图控制器(它的视图不在屏幕上的任何地方),因此通常看不到任何动画。

根据我的理解,您已经在屏幕上显示了该视图控制器的另一个实例(对吗?)-这就是您需要使用的一个实例。 以某种方式(例如,属性)将其指针传递给TestDetailViewController,然后使用该对象调用您的动画方法。

PS。 我建议您以小写字母开头命名所有方法;)

您可以尝试的是:

[UIView animateWithDuration:0.15f animations:^{
     fixedView.frame=CGRectMake(-500, 0,0,0);
}completion:^(BOOL finished){

}];

您确定不带第一个参数就可以调用[UIView beginAnimations:....]吗?

问题是,您没有在详细信息视图控制器中引用同一主视图控制器。

您正在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];

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM