如何向子视图显示动画,因为它出现在 UIViewController 中
How to show animation to a child view as it is appears in a UIViewController
我有一个视图控制器。我有一个段控制。
和一个容器视图。
在那个容器视图中,我正在显示 tableviewcontroller。作为子视图。
我有段控。 2 UITableViewControllers.Which 是绘制它们的视图控制器的子视图。
默认情况下将选择第一个。
当我们点击第二个时。它应该带有一些动画,例如滑进去。我附上了我的代码。
但它没有显示任何动画。谁能告诉我哪里出错了?
PS :我是 ios 开发人员的新手。
这是我的演示项目的一部分。
`
- (IBAction)segmentChanged:(UISegmentedControl *)sender
{
FirstTableTableViewController * ftc = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstTableTableViewController"];
SecondTableViewController * stc = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondTableTableViewController"];
if (sender.selectedSegmentIndex == 0)
{
ftc.dataArray =[[NSMutableArray alloc]initWithArray:tab1];
[self pushViewControllers:ftc :stc];
}
else
{
stc.dataArray =[[NSMutableArray alloc]initWithArray:tab2];
[self pushViewControllers:stc :ftc];
}
}
- (void)hideContentController: (UITableViewController *) content
{
[content willMoveToParentViewController:nil]; // 1
[content.view removeFromSuperview]; // 2
[content removeFromParentViewController]; // 3
}
-(void)displayContentController:(UITableViewController *) content;
{
[self addChildViewController:content]; // 1
content.view.frame = self.contentView.bounds; // 2
[self.contentView addSubview:content.view];
[content didMoveToParentViewController:self]; // 3
}
-(void)pushViewControllers:(UITableViewController *)newVC :(UITableViewController *)oldVC
{
[self hideContentController:oldVC];
[newVC.view layoutIfNeeded];
CGRect containerFrame = self.contentView.frame;
CGFloat pt = CGRectGetMaxX(self.contentView.frame);
CGRect otherOffsetRect = CGRectMake(pt, self.contentView.frame.origin.y, self.contentView.frame.size.width, self.contentView.frame.size.height);
newVC.view.frame = otherOffsetRect;
[UIView animateWithDuration:1.0f
delay:0.5f
options:UIViewAnimationOptionCurveEaseOut
animations:^{
newVC.view.frame = containerFrame;
}
completion:^(BOOL finished)
{
[self addChildViewController:newVC]; // 1
[self.contentView addSubview:newVC.view];
[newVC didMoveToParentViewController:self]; // 3
}];
}
`
FirstTableTableViewController * ftc = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstTableTableViewController"];
SecondTableViewController * stc = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondTableTableViewController"];
if (sender.selectedSegmentIndex == 0)
{
ftc.dataArray =[[NSMutableArray alloc]initWithArray:tab1];
[self pushViewControllers:ftc :stc];
}
else
{
stc.dataArray =[[NSMutableArray alloc]initWithArray:tab2];
[self pushViewControllers:stc :ftc];
}
}
- (void)hideContentController: (UITableViewController *) content
{
[content willMoveToParentViewController:nil]; // 1
[content.view removeFromSuperview]; // 2
[content removeFromParentViewController]; // 3
}
-(void)displayContentController:(UITableViewController *) content;
{
[self addChildViewController:content]; // 1
content.view.frame = self.contentView.bounds; // 2
[self.contentView addSubview:content.view];
[content didMoveToParentViewController:self]; // 3
}
-(void)pushViewControllers:(UITableViewController *)newVC :(UITableViewController *)oldVC
{
CGRect ogFrame = self.contentView.bounds;
[self hideContentController:oldVC];
[self displayContentController:newVC];
CGFloat pt = CGRectGetWidth(oldVC.view.frame);
CGRect newFrame = self.contentView.bounds;
newFrame.origin.x += pt;
newFrame.size.height = self.contentView.frame.size.height;
newFrame.size.width = self.contentView.frame.size.width;
newVC.view.frame = newFrame;
[UIView animateWithDuration:0.6f
delay:0.5f
options:UIViewAnimationOptionCurveEaseOut
animations:^{
newVC.view.frame = ogFrame;
}
completion:^(BOOL finished)
{}];
}
这个解决了。
虽然我确信可以有更有效的方法来解决这个问题。
请分享提高此代码效率的方法。
我有一个视图控制器。我有一个段控制。 和一个容器视图。 在那个容器视图中,我正在显示 tableviewcontroller。作为子视图。
我有段控。 2 UITableViewControllers.Which 是绘制它们的视图控制器的子视图。 默认情况下将选择第一个。 当我们点击第二个时。它应该带有一些动画,例如滑进去。我附上了我的代码。 但它没有显示任何动画。谁能告诉我哪里出错了?
PS :我是 ios 开发人员的新手。 这是我的演示项目的一部分。
`
- (IBAction)segmentChanged:(UISegmentedControl *)sender
{
FirstTableTableViewController * ftc = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstTableTableViewController"];
SecondTableViewController * stc = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondTableTableViewController"];
if (sender.selectedSegmentIndex == 0)
{
ftc.dataArray =[[NSMutableArray alloc]initWithArray:tab1];
[self pushViewControllers:ftc :stc];
}
else
{
stc.dataArray =[[NSMutableArray alloc]initWithArray:tab2];
[self pushViewControllers:stc :ftc];
}
}
- (void)hideContentController: (UITableViewController *) content
{
[content willMoveToParentViewController:nil]; // 1
[content.view removeFromSuperview]; // 2
[content removeFromParentViewController]; // 3
}
-(void)displayContentController:(UITableViewController *) content;
{
[self addChildViewController:content]; // 1
content.view.frame = self.contentView.bounds; // 2
[self.contentView addSubview:content.view];
[content didMoveToParentViewController:self]; // 3
}
-(void)pushViewControllers:(UITableViewController *)newVC :(UITableViewController *)oldVC
{
[self hideContentController:oldVC];
[newVC.view layoutIfNeeded];
CGRect containerFrame = self.contentView.frame;
CGFloat pt = CGRectGetMaxX(self.contentView.frame);
CGRect otherOffsetRect = CGRectMake(pt, self.contentView.frame.origin.y, self.contentView.frame.size.width, self.contentView.frame.size.height);
newVC.view.frame = otherOffsetRect;
[UIView animateWithDuration:1.0f
delay:0.5f
options:UIViewAnimationOptionCurveEaseOut
animations:^{
newVC.view.frame = containerFrame;
}
completion:^(BOOL finished)
{
[self addChildViewController:newVC]; // 1
[self.contentView addSubview:newVC.view];
[newVC didMoveToParentViewController:self]; // 3
}];
}
`
FirstTableTableViewController * ftc = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstTableTableViewController"];
SecondTableViewController * stc = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondTableTableViewController"];
if (sender.selectedSegmentIndex == 0)
{
ftc.dataArray =[[NSMutableArray alloc]initWithArray:tab1];
[self pushViewControllers:ftc :stc];
}
else
{
stc.dataArray =[[NSMutableArray alloc]initWithArray:tab2];
[self pushViewControllers:stc :ftc];
}
}
- (void)hideContentController: (UITableViewController *) content
{
[content willMoveToParentViewController:nil]; // 1
[content.view removeFromSuperview]; // 2
[content removeFromParentViewController]; // 3
}
-(void)displayContentController:(UITableViewController *) content;
{
[self addChildViewController:content]; // 1
content.view.frame = self.contentView.bounds; // 2
[self.contentView addSubview:content.view];
[content didMoveToParentViewController:self]; // 3
}
-(void)pushViewControllers:(UITableViewController *)newVC :(UITableViewController *)oldVC
{
CGRect ogFrame = self.contentView.bounds;
[self hideContentController:oldVC];
[self displayContentController:newVC];
CGFloat pt = CGRectGetWidth(oldVC.view.frame);
CGRect newFrame = self.contentView.bounds;
newFrame.origin.x += pt;
newFrame.size.height = self.contentView.frame.size.height;
newFrame.size.width = self.contentView.frame.size.width;
newVC.view.frame = newFrame;
[UIView animateWithDuration:0.6f
delay:0.5f
options:UIViewAnimationOptionCurveEaseOut
animations:^{
newVC.view.frame = ogFrame;
}
completion:^(BOOL finished)
{}];
}
这个解决了。
虽然我确信可以有更有效的方法来解决这个问题。 请分享提高此代码效率的方法。