固定
事实证明,动画被调用了两次。我现在已经修复了它,因此动画只调用一次,并且可以完美运行。
我怀疑这可能与我使用子视图控制器有关,
但是当我尝试使用动画删除子视图控制器的视图时,我注意到一些奇怪的行为。
我将子视图控制器以及子视图控制器的视图添加到父视图,并从屏幕底部对该视图进行动画处理。这非常有效 — 我的问题是当我尝试删除子视图/视图控制器时。我正在将孩子的视图动画化到屏幕底部,然后在完成块中调用[self.view removeFromSuperview]
,但视图立即被删除(因此不会发生动画(。如果我删除[self.view removeFromSuperview]
行,动画将正常工作,但随后视图不会从父视图控制器的视图中删除。
添加子视图控制器
(这按预期工作(
ChildViewController *myChildViewController = [[ChildViewController alloc] init];
myChildViewController.view.frame = CGRectMake(0.f, self.view.frame.size.height, self.view.frame.size.width, self.view.frame.size.height - 64.f);
[self addChildViewController:myChildViewController];
[self.view addSubview:myChildViewController.view];
[myChildViewController didMoveToParentViewController:self];
[UIView animateWithDuration:0.75f delay:0.f usingSpringWithDamping:0.6f initialSpringVelocity:0.75f options:0 animations:^{
myChildViewController.view.frame = CGRectMake(0.f, 64.f, self.view.frame.size.width, self.view.frame.size.height - 64.f);
} completion:nil];
删除子视图控制器
(这不起作用 — 视图会立即删除,而不是在完成后删除(
[UIView animateWithDuration:0.75f delay:0.f usingSpringWithDamping:0.6f initialSpringVelocity:0.75f options:0 animations:^{
self.view.frame = CGRectMake(0.f, self.view.superview.frame.size.height, self.view.frame.size.width, self.view.frame.size.height);
} completion:^(BOOL finished) {
if (finished)
{
[self willMoveToParentViewController:self.parentViewController];
[self.view removeFromSuperview];
[self removeFromParentViewController];
}
}];
我什至尝试删除[self willMoveToParentViewController:self.parentViewController]
并[self removeFromParentViewController]
只是为了看看这是否改变了什么,但只要[self.view removeFromSuperview]
在那里,视图就会立即消失。
在父类中添加
- (void) moveToAddJobVC:(NSString*)storyboardId {
ChildViewController *destVC = [self.storyboard instantiateViewControllerWithIdentifier:storyboardId];
destVC.completionHandler = ^(NSString* string) {
NSLog(@"Returned strng.....%@",string);
//[self viewWillAppear:YES];
};
[destVC.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self addChildViewController:destVC];
[self.view addSubview:destVC.view];
[destVC didMoveToParentViewController:self];
[UIView animateWithDuration:0.3 animations:^{
[destVC.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
}];
}
并在子VC中写入
@property (nonatomic,copy) void (^completionHandler)(NSString *string);
- (IBAction)dismissBtnAction:(id)sender{
if (self.completionHandler)
{
self.completionHandler(@"Return data");
}
[self removeFromParentViewController];
[self.view removeFromSuperview];
}