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

时间:2016-03-09 10:53:09

标签: ios objective-c uiimage gradient mask

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

我怎样才能做到这一点? enter image description here

3 个答案:

答案 0 :(得分:2)

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

希望这会对你有所帮助。

答案 1 :(得分:2)

  1. 使用您的背景图片设置UIImageView。
  2. 在顶部添加UIVisualEffectView:

    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];
    
  3. 在顶部添加一个UIView,并将UITableView(或其他)放入其中。
  4. 添加此代码:

    act="1" bar="moreCrap" interesting="car" foo="I"
    act="1" bar="that" interesting="car" foo="just"
    act="1" bar="matters" interesting="truck" foo="need"
    act="1" bar="to" interesting="sedan" foo="a"
    act="1" bar="no" interesting="sedan" foo="regex "
    act="1" bar="one" interesting="truck" foo="matcher"
    act="1" bar="including" interesting="tricycle" foo="that"
    act="1" bar="me" interesting="truck" foo="will"
    act="1" bar="or" interesting="sedan" foo="delete"
    act="1" bar="even" interesting="sedan" foo="repetitions"
    act="1" bar="you" interesting="sedan" foo="of"
    act="1" bar="lol" interesting="sedan" foo="stuff"
    act="1" bar="me" interesting="truck" foo="ha"
    act="2" bar="no" interesting="sedan" foo="regex "
    act="2" bar="one" interesting="truck" foo="matcher"
    act="2" bar="including" interesting="tricycle" foo="that"
    act="2" bar="me" interesting="truck" foo="will"
    act="2" bar="or" interesting="sedan" foo="delete"
    act="2" bar="even" interesting="sedan" foo="repetitions"
    act="2" bar="you" interesting="sedan" foo="of"
    act="2" bar="lol" interesting="sedan" foo="stuff"
    act="2" bar="me" interesting="truck" foo="ha"
    act="2" bar="me" interesting="truck" foo="ha"
    
  5. 根据自己的需要调整变量,您必须更改位置。

    你不会模糊'顶部和底部,但逐渐通过梯度层掩盖它们。

答案 2 :(得分:1)

我可以想办法达到这个效果。但你需要的不是模糊面具,你需要使用剪贴蒙版。

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来实现相同的效果(这也适用于缩放)。关于如何创建渐变层的堆栈溢出有很多解决方案,如下所示:Create gradient image programmatically in iOS

说过我不明白为什么你的问题被投了票。我认为这是一个非常好的问题。

希望这有帮助!