如何在视图控制器滑出时制作模糊效果

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"(这个问题的解决方案没有 也帮不上忙)。

  1. 我想使用 willDisapear 方法,但它没有 运行,因为主视图控制器不会消失。它只是滑出。

那么,你能帮我解决这个问题吗?

P.S。如果您为主视图控制器提出除模糊之外的任何其他效果,我将很高兴。 P.P.S。很抱歉问题中有很多错误。

我找到了适合我的答案。我不使用多个 ViewController 来实现菜单面板。 现在我正在使用另一个 UIView 调用 menuPanel。它包含 tableView(UITableView) 和 blurView(UIView)。第二个在第一个下面。 您可以通过以下方式模糊此视图:

  1. 来自使用 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 是您想​​要模糊(或任何其他效果)的视图

  1. 来自带有视觉效果视图的故事板。(我选择了)

毕竟我已经将 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。

就是这样。希望对某人有帮助=)