我有我的主视图,当用户点击“显示”按钮时,我想要发生两件事:
UIView
黑色darkenBackground
,alpha 0.5覆盖整个父母
视图。我将其称为self.secondViewController.view
darkenBackground
darkenBackground
}
醇>
当用户完成后,他们点击“完成”并发生以下情况:
self.secondViewController.view
淡出并从superview中移除。darkenBackground
滑出屏幕
底部方向,并从superview中删除。所有动画同时工作。
到目前为止,我已经能够实现第一部分(排序),过渡。这很好用。但是当用户点击“完成”时,转换不能按要求工作。我面临的问题是:
self.secondViewController.view
和self.secondViewController.view
淡出并被删除,但是
- (IBAction)showSecondView {
darkenBackground = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 460)];
[darkenBackground setBackgroundColor:[UIColor blackColor]];
[darkenBackground setAlpha:0.5];
self.secondViewController.view.frame = CGRectMake(0, 0, 320, 460);
self.secondViewController.view.backgroundColor = [UIColor clearColor];
[CATransaction begin];
CATransition *animation = [CATransition animation];
[animation setDuration:0.5];
[animation setType:kCATransitionFade];
CATransition *animation2 = [CATransition animation];
[animation2 setDuration:0.5];
[animation2 setType:kCATransitionMoveIn];
[animation2 setSubtype:kCATransitionFromTop];
[animation2 setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[self.view addSubview:darkenBackground];
[self.view addSubview:self.secondViewController.view];
[[self.view layer] addAnimation:animation forKey:@"darkenBkgFadeIn"];
[[self.secondViewController.view layer] addAnimation:animation2 forKey:@"ShowSecondView"];
[CATransaction commit];
}
不应该淡出!我尝试仅动画第二个视图,但它只是在没有动画的情况下消失。这是我的代码:
当用户点击“显示”时:
secondViewController.m
当用户点击“完成”时(在- (IBAction)hideSecondView {
[CATransaction begin];
CATransition *animation = [CATransition animation];
[animation setDuration:0.5];
[animation setType:kCATransitionFade];
CATransition *animation2 = [CATransition animation];
[animation2 setDuration:0.5];
[animation2 setType:kCATransitionPush];
[animation2 setSubtype:kCATransitionFromBottom];
[animation2 setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[self.myParentController.darkenBackground removeFromSuperview];
[self.myParentController.secondViewController.view removeFromSuperview];
[[self.myParentController.view layer] addAnimation:animation forKey:@"darkenBkgFadeOut"];
[[self.myParentController.secondViewController.view layer] addAnimation:animation2 forKey:@"RemoveSecondView"];
[CATransaction commit];
}
类中定义的函数,它通过委托引用主视图控制器变量):
TWTweetComposeViewController
最终,我希望以{{1}}模态视图出现的相同方式显示视图,背景变暗,控制器出现。我可以使用模态视图控制器,但我遇到的问题是,当呈现视图控制器时它只“出现”并且不会从底部滑动(因为我需要半透明背景,我不能使用默认模态视图的上下文)。
无法想出这一点,会很感激一些指导。
答案 0 :(得分:0)
我认为self.myParentController.view
中使用的-hideSecondView
与self.view
中-showSecondView
的视图相同。如果是这种情况,那么您将在此处应用转换到整个视图:
[[self.myParentController.view layer] addAnimation:animation forKey:@"darkenBkgFadeOut"];
您在self.secondViewController.view
中添加了self.view
作为-showSecondView
的子视图,因此当您稍后在self.myParentController.view
上执行转换时,它会将转换应用于其所有子视图(即self.secondViewController.view
)。
不是将转换应用于self.myParentController.view
中的-hideSecondView
,而是直接应用于darkenBackground
:
[[self.myParentController.darkenBackground layer] addAnimation:animation forKey:@"darkenBkgFadeOut"];
如果我没记错的话,您可以在向视图中添加/删除图层时应用CATransitions
。如果没有,那么你必须将darkenBackground
包装在一个单独的容器视图中并执行转换,以便在淡出时不包含self.secondViewController.view
。