Добавьте маску размытия сверху и снизу экрана в Objective-C

Мне нужно добавить маску сверху и туловище экрана, как это.

Как я могу это достичь? введите описание изображения здесь

Ответ 1

if (!UIAccessibilityIsReduceTransparencyEnabled()) {        
        self.BlurView.backgroundColor = [UIColor clearColor];
        UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
        UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
        blurEffectView.frame = self.view.bounds;
        [blurEffectView setAlpha:1.0];
        [self.BlurView addSubview:blurEffectView];        
    }

Где self.BlurView - тип UIView.

Вы можете сохранить это для своего верхнего и нижнего вида. И можете настроить рамку blurEffectView.frame в соответствии с вашими верхними и нижними размерами.

Надеюсь, это поможет вам.

Ответ 2

Я могу придумать способ достижения этого эффекта. Но вам не нужна маска размытия, вам нужно использовать обтравочную маску.

1- представляет собой контроллер модального представления с представлением, содержащим UIVisualEffectView в обратном направлении, и представление scrollview/tableview/collection спереди, которое смещено на 40 пикселей (или сколько угодно) сверху и снизу. 2- Добавьте маску в прокрутку, используя черно-белое изображение, адаптированное к задаче, вы можете добавить маску, используя следующий код:

var maskImage = UIImage(name: "yourMask")
var maskLayer = CALayer()
maskLayer.frame = scrollView.bounds()
maskLayer.contents = maskImage.CGImage
scrollview.layer.mask = maskLayer

3- Альтернативно, вы также можете использовать CAGradientLayer для достижения такого же эффекта (это будет работать лучше при масштабировании). Есть много решений о переполнении стека о том, как создать слой градиента, например этот: программно создать изображение градиента в iOS

Сказав, что я не понимаю, почему ваш вопрос проголосовали. Я думаю, что это очень хороший вопрос.

Надеюсь, это поможет!

Ответ 3

  • Настройте UIImageView с фоновым изображением.
  • Добавьте UIVisualEffectView сверху:

    UIVisualEffectView * vs = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]];
    vs.frame = self.view.bounds;
    [self.view addSubview:vs];
    
  • Добавьте UIView сверху и поместите в него UITableView (или что-то еще).
  • Добавьте этот код:

    CAGradientLayer * layer = [CAGradientLayer layer];
    layer.frame = tableHolder.bounds;
    layer.colors = [NSArray arrayWithObjects:(id)[UIColor blackColor].CGColor, (id)[UIColor clearColor].CGColor, (id)[UIColor clearColor].CGColor, nil];
    layer.locations = @[@0.90,@0.99,@1.0];
    layer.startPoint = CGPointMake(0.0, 1.0f);
    layer.endPoint = CGPointMake(0.0f, 0.0f);
    tableHolder.layer.mask = layer;
    tableHolder.layer.masksToBounds = true;
    [tableHolder.layer insertSublayer:layer atIndex:0];
    

Отрегулируйте переменные для собственных нужд, вам нужно будет изменить местоположение.

Вы не "размываете" вершины и днища, но постепенно маскируете их через слой градиента.