给图片制作六边形阴影

啥也不说先上个效果图

给图片制作六边形阴影_第1张图片
Paste_Image.png

这个效果写起来挺简单,主要运用下面几个知识点

  • layermask : 图层蒙版
  • layershadowPath : 绘制自定义形状阴影
  • UIBezierPath :绘制六边形路线

说完知识点下面上代码了

  • 绘制六边形的路线
-(CGPathRef)getCGPath:(CGFloat)viewWidth{
    UIBezierPath * path = [UIBezierPath bezierPath];
    path.lineWidth = 2;
    [[UIColor whiteColor] setStroke];
    [path moveToPoint:CGPointMake((sin(M_1_PI / 180 * 60)) * (viewWidth / 2), (viewWidth / 4))];
    [path addLineToPoint:CGPointMake((viewWidth / 2), 0)];
    [path addLineToPoint:CGPointMake(viewWidth - ((sin(M_1_PI / 180 * 60)) * (viewWidth / 2)), (viewWidth / 4))];
    [path addLineToPoint:CGPointMake(viewWidth - ((sin(M_1_PI / 180 * 60)) * (viewWidth / 2)), (viewWidth / 2) + (viewWidth / 4))];
    [path addLineToPoint:CGPointMake((viewWidth / 2), viewWidth)];
    [path addLineToPoint:CGPointMake((sin(M_1_PI / 180 * 60)) * (viewWidth / 2), (viewWidth / 2) + (viewWidth / 4))];
    [path closePath];
    return path.CGPath;
}
  • 绘制一个六边形的layer,并把image 赋值到contents 上
    CGRect hexagnoRect = self.bounds;
    //绘制一个六边形的layer,并复制一个image给他的contents
    CALayer *hexagonLayer = [CALayer layer];
    hexagonLayer.frame = hexagnoRect;
    CAShapeLayer * shapLayer = [CAShapeLayer layer];
    shapLayer.lineWidth = 1;
    shapLayer.strokeColor = [UIColor whiteColor].CGColor;
    shapLayer.path = [self getCGPath:hexagnoRect.size.width-20];
    hexagonLayer.mask = shapLayer;
    hexagonLayer.contents = (__bridge id _Nullable)(self.image.CGImage);
  • 创建一个CALayer,将六边形layer 添加到CALayer上,并绘制模糊阴影
    CALayer *completeLayer = [CALayer layer];
    completeLayer.frame = CGRectMake(10, 10, self.bounds.size.width-10, self.bounds.size.height-10);
    [completeLayer addSublayer:hexagonLayer];
    completeLayer.shadowOpacity = 1.0f;
    completeLayer.shadowPath = [self getCGPath:hexagnoRect.size.width];
    completeLayer.shadowOffset = CGSizeMake(-10, -10);
    
    completeLayer.shadowColor = self.hg_shadowColor.CGColor;
    [self.layer addSublayer:completeLayer];

这样就完成只做了

给图片制作六边形阴影_第2张图片
制作阴影.gif

戳我看Demo
感觉不错的给个星星哦

你可能感兴趣的:(给图片制作六边形阴影)