如何在没有navigationController的viewController中制作CAAnimation
Posted
技术标签:
【中文标题】如何在没有navigationController的viewController中制作CAAnimation【英文标题】:How to make CAAnimation in viewController, which presented without navigationController 【发布时间】: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: 方法,并将视图控制器作为参数呈现。 【参考方案1】:你需要添加self.blurViewController's
视图作为子视图而不是它的子视图,
为了调用viewWillAppear
和viewDidAppear
视图控制器视图应该在那里,但是你正在做[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 方法您可以访问所有其他子视图,这将转到所有已初始化并准备显示的视图以上是关于如何在没有navigationController的viewController中制作CAAnimation的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有警告和错误的闭包内使用 navigationController?.popViewController(animated: true)?
如何将导航栏(没有 NavigationController)和搜索栏添加到 TableView
展开到没有 NavigationController 的特定 ViewController
如何在 iPad 中将 UIModalPresentationFormSheet 与 NavigationController 一起使用?
在 Swift 3 中使用 didSelect 和 navigationController 在没有情节提要的情况下在 TableViewControllers 之间传递数据