如何在视图控制器滑出时制作模糊效果
How to make blur effect when view controller slides out
我有一个带有滑出菜单的程序。在正确的位置有菜单按钮(BarButtonItem)。当视图控制器加载时我正在做下一步
_menuBarButton.target = self.revealViewController;
_menuBarButton.action = @selector(revealToggle:);
因此,当我单击此按钮时,视图控制器向右滑出,我看到另一个视图控制器。
所以,我想让主视图控制器在滑出时变得模糊。我有一段代码如何使它变得模糊,但我无法实现这段代码,因为当我点击蝙蝠按钮时,它 运行s revealToggle: selector.
我试过:
1. 设置条形按钮的动作。首先模糊视图控制器:
- (IBAction)menuBarButtonTapped:(UIBarButtonItem *)sender {
[self setBlurEffect];
_menuBarButton.target = self.revealViewController;
_menuBarButton.action = @selector(revealToggle:);
[self.menuBarButton.target performSelector:@selector(revealToggle:)];
}
但是应用程序崩溃 "unrecognized selector"(这个问题的解决方案没有
也帮不上忙)。
- 我想使用 willDisapear 方法,但它没有 运行,因为主视图控制器不会消失。它只是滑出。
那么,你能帮我解决这个问题吗?
P.S。如果您为主视图控制器提出除模糊之外的任何其他效果,我将很高兴。
P.P.S。很抱歉问题中有很多错误。
我找到了适合我的答案。我不使用多个 ViewController 来实现菜单面板。
现在我正在使用另一个 UIView 调用 menuPanel。它包含 tableView(UITableView) 和 blurView(UIView)。第二个在第一个下面。
您可以通过以下方式模糊此视图:
来自使用 next 方法的代码。
(void) setBlurEffect {// Add blur view
CGRect boundsView = self.someView.bounds;
UIVisualEffectView *tableViewVisualEffect = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight]];
self.tableViewVisualEffect.frame = boundsView;
self.tableViewVisualEffect.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
self.tableViewVisualEffect.backgroundColor = [UIColor clearColor];
[UIView transitionWithView:self.view
duration:0.3
options:UIViewAnimationOptionTransitionCrossDissolve
animations: ^ {
[self.someView addSubview:self.tableViewVisualEffect];
}
completion: nil ];
// Here you can add visual effects to any UIView control.
// Replace custom view with navigation bar in above code to add effects to custom view.
}
其中 someView 是您想要模糊(或任何其他效果)的视图
- 来自带有视觉效果视图的故事板。(我选择了)
毕竟我已经将 tableView 和 blurView 设置到 menuPanelView 中,固定在 menuPanel 的所有边上,距离为 0。
我做的最后一件事是用动画更改 menuPanelView 的位置:
[self.menuPanelView setFrame:self.visibleTableViewFramePosition];
[UIView animateWithDuration:0.8
animations:^{
[self.menuPanelView setFrame:self.invisibleTableViewFramePosition];
} completion:nil];
其中 invisibleTableViewFramePosition
是 CGRect 变量,当它必须不可见时包含 menuPanelView 的位置。您还需要创建 visibleTableViewFramePosition。
就是这样。希望对某人有帮助=)
我有一个带有滑出菜单的程序。在正确的位置有菜单按钮(BarButtonItem)。当视图控制器加载时我正在做下一步
_menuBarButton.target = self.revealViewController;
_menuBarButton.action = @selector(revealToggle:);
因此,当我单击此按钮时,视图控制器向右滑出,我看到另一个视图控制器。
所以,我想让主视图控制器在滑出时变得模糊。我有一段代码如何使它变得模糊,但我无法实现这段代码,因为当我点击蝙蝠按钮时,它 运行s revealToggle: selector.
我试过: 1. 设置条形按钮的动作。首先模糊视图控制器:
- (IBAction)menuBarButtonTapped:(UIBarButtonItem *)sender {
[self setBlurEffect];
_menuBarButton.target = self.revealViewController;
_menuBarButton.action = @selector(revealToggle:);
[self.menuBarButton.target performSelector:@selector(revealToggle:)];
}
但是应用程序崩溃 "unrecognized selector"(这个问题的解决方案没有 也帮不上忙)。
- 我想使用 willDisapear 方法,但它没有 运行,因为主视图控制器不会消失。它只是滑出。
那么,你能帮我解决这个问题吗?
P.S。如果您为主视图控制器提出除模糊之外的任何其他效果,我将很高兴。 P.P.S。很抱歉问题中有很多错误。
我找到了适合我的答案。我不使用多个 ViewController 来实现菜单面板。 现在我正在使用另一个 UIView 调用 menuPanel。它包含 tableView(UITableView) 和 blurView(UIView)。第二个在第一个下面。 您可以通过以下方式模糊此视图:
来自使用 next 方法的代码。
(void) setBlurEffect {// Add blur view CGRect boundsView = self.someView.bounds; UIVisualEffectView *tableViewVisualEffect = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight]]; self.tableViewVisualEffect.frame = boundsView; self.tableViewVisualEffect.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; self.tableViewVisualEffect.backgroundColor = [UIColor clearColor]; [UIView transitionWithView:self.view duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations: ^ { [self.someView addSubview:self.tableViewVisualEffect]; } completion: nil ]; // Here you can add visual effects to any UIView control. // Replace custom view with navigation bar in above code to add effects to custom view. }
其中 someView 是您想要模糊(或任何其他效果)的视图
- 来自带有视觉效果视图的故事板。(我选择了)
毕竟我已经将 tableView 和 blurView 设置到 menuPanelView 中,固定在 menuPanel 的所有边上,距离为 0。
我做的最后一件事是用动画更改 menuPanelView 的位置:
[self.menuPanelView setFrame:self.visibleTableViewFramePosition];
[UIView animateWithDuration:0.8
animations:^{
[self.menuPanelView setFrame:self.invisibleTableViewFramePosition];
} completion:nil];
其中 invisibleTableViewFramePosition
是 CGRect 变量,当它必须不可见时包含 menuPanelView 的位置。您还需要创建 visibleTableViewFramePosition。
就是这样。希望对某人有帮助=)