2

我想使用 Storyboards 为滑块设计内容,似乎设计屏幕外内容的一种简单方法是使用 childViewController。所以我做了这个

myViewController = [[UIStoryboard storyboardWithName:@"ipad" bundle:NULL] instantiateViewControllerWithIdentifier:@"keyPadOffScreen"];

[self addChildViewController:myViewController];
[myViewController didMoveToParentViewController:self];
newView = myViewController.view;
[self.view addSubview:newView];

这将整个视图控制器添加到我的根视图之上。问题是,我只想显示其中一个子视图,而不是整个视图。只要我知道如何添加根视图,我就可以处理动画。我试过这个只是添加子视图(sliderView 是我想要的子视图的名称)而不是整个视图,但这什么也没做

newView = myViewController.sliderView;
[self.view addSubview:newView];

我应该使用不同的策略吗?

编辑:这确实有效,但似乎很愚蠢 - 将视图大小设置为子视图的大小。

  newView.frame = CGRectMake(newView.frame.origin.x, newView.frame.origin.y, newView.frame.size.width, **myViewController.sliderView.frame.size.height**);
4

2 回答 2

1

仅仅为了一个视图,它似乎有点矫枉过正。一旦你开始做很多自定义视图/动画/过渡的东西,它通常更容易在代码中实现,或者至少对我来说是这样,因为我已经这样做了很长时间了。

但也许你想坚持使用 Storyboard。我尊重。如果你有几个开发人员在做这件事,那么在你设置 UI 的方式上保持一定的一致性是很重要的。

与其将其保存在单独的视图控制器中并在需要它以在屏幕上显示动画时添加它,只需将其添加到现有视图控制器并将其设置为隐藏,或在 IB 中将其 alpha 设置为 0.0。然后您的动画可以撤消它并使其可见。

于 2013-12-20T00:47:25.410 回答
0

您可以在此处使用自定义 segue,例如:

@implementation FRPresentEnteringPopupSegue

- (void)perform
{
    FirstVC *toVC = self.destinationViewController;
    SecondNavigationController *fromVC = self.sourceViewController;
    toVC.view.frame = CGRectMake(0.0, 0.0, 300.0, 135.0);
    toVC.view.center = CGPointMake(fromVC.view.bounds.size.width/2, fromVC.view.bounds.size.height + toVC.view.bounds.size.height/2);
    [fromVC.view addSubview:toVC.view];
    [toVC viewWillAppear:YES];
    [UIView animateWithDuration:0.5
                          delay:0.0
         usingSpringWithDamping:0.7
          initialSpringVelocity:0.5
                        options:UIViewAnimationOptionBeginFromCurrentState
                     animations:^{
                         toVC.view.center = CGPointMake(fromVC.view.bounds.size.width/2, fromVC.view.bounds.size.height/2);
                     }completion:^(BOOL finished) {
                         [toVC viewDidAppear:YES];
                     }];
}

@end
  • 让你的 UIStoryboardSegue 子类
  • - (void)perform使用您的自定义视图外观代码覆盖方法
  • 使用segue通常的方式
于 2013-12-20T01:22:24.703 回答