Ios 在Objective-C中的屏幕顶部和底部添加模糊遮罩

Ios 在Objective-C中的屏幕顶部和底部添加模糊遮罩,ios,objective-c,uiimage,gradient,mask,Ios,Objective C,Uiimage,Gradient,Mask,我需要像这样在屏幕的顶部和底部添加遮罩 我怎样才能做到这一点 我可以想出一种方法来达到这个效果。但你需要的不是模糊遮罩,你需要使用剪辑遮罩 1-呈现一个模态视图控制器,其视图包含背面的UIVisualEffectView,以及前面的scrollview/tableview/collection视图,该视图从顶部和底部偏移40px(或您想要的偏移量)。 2-使用根据任务定制的黑白图像将遮罩添加到滚动视图中,您可以使用以下代码添加遮罩: var maskImage = UIImage(name: "

我需要像这样在屏幕的顶部和底部添加遮罩


我怎样才能做到这一点

我可以想出一种方法来达到这个效果。但你需要的不是模糊遮罩,你需要使用剪辑遮罩

1-呈现一个模态视图控制器,其视图包含背面的UIVisualEffectView,以及前面的scrollview/tableview/collection视图,该视图从顶部和底部偏移40px(或您想要的偏移量)。 2-使用根据任务定制的黑白图像将遮罩添加到滚动视图中,您可以使用以下代码添加遮罩:

var maskImage = UIImage(name: "yourMask")
var maskLayer = CALayer()
maskLayer.frame = scrollView.bounds()
maskLayer.contents = maskImage.CGImage
scrollview.layer.mask = maskLayer
3-或者,您也可以使用CAGradientLayer来实现相同的效果(这在缩放时也会更好)。关于如何创建渐变层,有很多关于堆栈溢出的解决方案,如下所示:

话虽如此,我不明白为什么你的问题被否决了。我认为这是一个非常好的问题

希望这有帮助

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
的类型

您可以将其保留在上视图和下视图中。并且可以根据您的上下尺寸调整frame
blurEffectView.frame

希望这对你有帮助

  • 使用背景图像设置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];
    
  • 根据您自己的需要调整变量,您必须更改位置


    你不是在“模糊”顶部和底部,而是通过渐变层逐渐掩盖它们。

    我想你应该查看以下链接: