【问题标题】:How to make CAAnimation in viewController, which presented without navigationController如何在没有navigationController的viewController中制作CAAnimation
【发布时间】:2016-03-30 12:42:34
【问题描述】:

在我的代码中,新的 viewcontroller 没有被推送到导航控制器中,而是作为小部件呈现。

-(void) loadBlurWidgetsWithClass:(Class) widgetClass andXib:(NSString*) xibName options:(NSDictionary *)options completion:(void (^)(void))competionBlock
{

     [self unloadBlurWidgetsRemovingView:NO];

     self.blurViewController = [[widgetClass alloc] initWithNibName:xibName bundle:nil options:options];
     [self.navigationItem.leftBarButtonItem setEnabled:NO];
     [self.blurViewController.view setBounds:self.view.bounds];
     [self.view addSubview:self.blurViewController.view];
     [self.blurViewController.view removeFromSuperview];

     self.blurViewController.main = self;

     [self showBlurViewDynamic:[options[@"dynamic"] boolValue] WithCompletion:^{
     for(UIView* v in self.blurViewController.view.subviews)
     {
          [_blurView addSubview:v];
     }
     if (competionBlock) {
          competionBlock();
     }
}];

}

因此,新类 viewWillAppear 和 viewDidAppear 不会被触发。但是在课堂上我想使用动画,我必须在 viewDidAppear 中初始化。你有一个解决方案我可以如何调用 viewDidAppear 或者我应该如何制作动画。提前谢谢你。

【问题讨论】:

  • 我认为您应该调用该视图控制器的 didMoveToParentViewController: 方法,并将视图控制器作为参数呈现。

标签: ios caanimation


【解决方案1】:

你需要添加self.blurViewController's 视图作为子视图而不是它的子视图, 为了调用viewWillAppearviewDidAppear 视图控制器视图应该在那里,但是你正在做[self.blurViewController.view removeFromSuperview]; 这一行删除了视图控制器视图视图控制器中没有视图以便调用将/确实出现方法。如果您想调用这些方法,请不要删除视图控制器的主视图,如果您不想要主视图控制器的视图,那么您可以将其背景颜色设置为清除或 alpha 为零或略高于零。

 self.blurViewController = [[widgetClass alloc] initWithNibName:xibName bundle:nil options:options];
 [self.navigationItem.leftBarButtonItem setEnabled:NO];
 [self.blurViewController.view setBounds:self.view.bounds];
 [self.view addSubview:self.blurViewController.view];
// [self.blurViewController.view removeFromSuperview]; 
 [self.blurViewController.view.alpha = 0.2f;
 //or
 //self.blurViewController.view.backgroundColor = [UIColor clearColor];
 [self showBlurViewDynamic:[options[@"dynamic"] boolValue] WithCompletion:^{
      [_blurView addSubview:self.blurViewController.view];
      if (competionBlock) {
      competionBlock();
 }}];

【讨论】:

  • 这些通过调用将/确实出现来决定我的问题,但在这种情况下我还有另一个问题,[self.blurViewController.view removeFromSuperview];应该在场。我创建了另一个使用 beginAppearanceTransition 和 endAppearanceTransition 调用显示函数的解决方案。它的工作,但我不知道在哪里调用这个函数。
  • 那里的方法你不需要调用,系统会被调用,你只需要实现这些方法
  • "声明 - (void)beginAppearanceTransition:(BOOL)isAppearing animated:(BOOL)animated 如果子视图控制器的视图即将添加到视图层次结构中,则为 YES,如果正在移除,则为 NO。如果您正在实现自定义容器控制器,请使用此方法告诉孩子它的视图即将出现或消失。不要直接调用 viewWillAppear:、viewWillDisappear:、viewDidAppear: 或 viewDidDisappear:。它不存在意味着调用“beginAppearanceTransition”时调用了“viewDidLoad”?
  • "如果你正在实现一个自定义的容器控制器,使用这个方法告诉孩子它的视图即将出现或消失。不要调用 viewWillAppear:、viewWillDisappear:、viewDidAppear: 或 viewDidDisappear:直接地。”它说你不需要调用做/将出现方法,它将由视图控制器自动调用,并且视图控制器调用viewDidload方法来设置你添加到视图控制器的所有视图。只有在viewDidLoad 方法您可以访问所有其他子视图,这将转到所有已初始化并准备显示的视图
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
  • 2010-12-14
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 2017-10-22
相关资源
最近更新 更多