UIView border with fade or blur effect

前端 未结 5 1651
悲哀的现实
悲哀的现实 2020-12-13 03:17

I\'m looking for method to add gradually fading or maybe blured border (I don\'t exactly know how to name this effect) to arbitrary UIView. I don\'t need animated effect, I

5条回答
  •  醉酒成梦
    2020-12-13 03:29

    I've found a solution - I've useed CALayer's property mask:

     CALayer *viewLayer = [back layer];
     CALayer* maskCompoudLayer = [CALayer layer];
    
     maskLayer.bounds = viewLayer.bounds;
    
     [maskLayer setPosition:CGPointMake(160, CGRectGetHeight(maskCompoudLayer.frame)/2.0)];     
    
     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
     CGContextRef context = CGBitmapContextCreate (NULL, 320, 480, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);     
    
     CGFloat colors[] = {
          0.5, 0.5, 0.5, 0.0, //BLACK
          0.0, 0.0, 0.0, 1.0, //BLACK
     };     
    
     CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, NULL, sizeof(colors)/(sizeof(colors[0])*4));     
     CGColorSpaceRelease(colorSpace);     
    
     NSUInteger gradientH = 20;
     NSUInteger gradientHPos = 0;
    
     CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0].CGColor);
     CGContextFillRect(context, CGRectMake(0, gradientHPos + gradientH, CGRectGetWidth(maskLayer.frame), CGRectGetHeight(maskLayer.frame)));     
    
     CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:0.0].CGColor);
     CGContextFillRect(context, CGRectMake(0, 0, 320, gradientHPos));
    
     CGContextDrawLinearGradient(context, gradient, CGPointMake(160, gradientHPos), CGPointMake(160, gradientHPos + gradientH), 0);     
     CGGradientRelease(gradient);     
    
     CGImageRef contextImage = CGBitmapContextCreateImage(context);
     CGContextRelease(context);     
    
     [maskLayer setContents:(id)contextImage];
    
     CGImageRelease (contextImage);
    
     viewLayer.masksToBounds = YES;
     viewLayer.mask = maskCompoudLayer;
    

    Using this code I have UITableView with fading border

提交回复
热议问题