美文网首页iOS常用很常
iOS设置某条边的阴影

iOS设置某条边的阴影

作者: _我和你一样 | 来源:发表于2021-03-15 21:43 被阅读0次

无论需求多奇葩,一点一点实现它。

要设置某条边的阴影,还是使用shadowPath自己画出来才可以,画一个也是画,干脆就都画了,任意边的阴影都可以设置。作为一个扩展方法更好用

来先试一下看看效果

    UIView *testView = [[UIView alloc]init];
    testView.backgroundColor = UIColor.blueColor;
    testView.frame = CGRectMake(200, 200, 300, 300);
    testView.center = self.view.center;
    [self.view addSubview:testView];
    [testView addShdowColor:UIColor.redColor shadowOpacity:0.8 shadowRadius:4 shadowSide:BNShadowSideLeft|BNShadowSideRight];
Simulator Screen Shot - iPhone 11 - 2021-03-15 at 21.43.16.png

下面是代码实现

/// 使用位枚举指定圆角位置
/// 通过在各个边画矩形来实现shadowpath,真正实现指那儿打那儿
/// @param shadowColor 阴影颜色
/// @param shadowOpacity 阴影透明度
/// @param shadowRadius 阴影半径
/// @param shadowSide 阴影位置
-(void)addShdowColor:(UIColor *)shadowColor
       shadowOpacity:(CGFloat)shadowOpacity
        shadowRadius:(CGFloat)shadowRadius
          shadowSide:(BNShadowSide)shadowSide;

-(void)addShdowColor:(UIColor *)shadowColor shadowOpacity:(CGFloat)shadowOpacity shadowRadius:(CGFloat)shadowRadius shadowSide:(BNShadowSide)shadowSide{
    self.layer.masksToBounds = NO;
    self.layer.shadowColor = shadowColor.CGColor;
    self.layer.shadowRadius = shadowRadius;
    self.layer.shadowOpacity = shadowOpacity;
    
    // 默认值 0 -3
    // 使用默认值即可,这个各个边都要设置阴影的,自己调反而效果不是很好。
    //    self.layer.shadowOffset = CGSizeMake(0, -3);
    
    CGRect bounds = self.layer.bounds;
    CGFloat maxX = CGRectGetMaxX(bounds);
    CGFloat maxY = CGRectGetMaxY(bounds);
    
    UIBezierPath *path = [UIBezierPath bezierPath];
    
    if (shadowSide & BNShadowSideTop) {
        // 上边
        [path moveToPoint:CGPointZero];
        [path addLineToPoint:CGPointMake(0, -shadowRadius)];
        [path addLineToPoint:CGPointMake(maxX, -shadowRadius)];
        [path addLineToPoint:CGPointMake(maxX, 0)];
    }
    
    if (shadowSide & BNShadowSideRight) {
        // 右边
        [path moveToPoint:CGPointMake(maxX, 0)];
        [path addLineToPoint:CGPointMake(maxX,maxY)];
        [path addLineToPoint:CGPointMake(maxX + shadowRadius, maxY)];
        [path addLineToPoint:CGPointMake(maxX + shadowRadius, 0)];
    }
    
    if (shadowSide & BNShadowSideBottom) {
        // 下边
        [path moveToPoint:CGPointMake(0, maxY)];
        [path addLineToPoint:CGPointMake(maxX,maxY)];
        [path addLineToPoint:CGPointMake(maxX, maxY + shadowRadius)];
        [path addLineToPoint:CGPointMake(0, maxY + shadowRadius)];
    }
    
    if (shadowSide & BNShadowSideLeft) {
        // 左边
        [path moveToPoint:CGPointMake(0, 0)];
        [path addLineToPoint:CGPointMake(-shadowRadius,0)];
        [path addLineToPoint:CGPointMake(-shadowRadius, maxY)];
        [path addLineToPoint:CGPointMake(0, maxY)];
    }
    
    self.layer.shadowPath = path.CGPath;
}

当然,用到的枚举需要在头文件中定义哦

typedef NS_OPTIONS(NSUInteger, BNShadowSide) {
    BNShadowSideNone   = 0,
    BNShadowSideTop    = 1 << 0,
    BNShadowSideLeft   = 1 << 1,
    BNShadowSideBottom = 1 << 2,
    BNShadowSideRight  = 1 << 3,
    BNShadowSideAll    = BNShadowSideTop | BNShadowSideLeft | BNShadowSideBottom | BNShadowSideRight
};

相关文章

  • iOS设置某条边的阴影

    无论需求多奇葩,一点一点实现它。 要设置某条边的阴影,还是使用shadowPath自己画出来才可以,画一个也是画,...

  • App开发中遇到的问题

    iOS xib view设置阴影失效问题 设置阴影 设置footer高度无效 iOS 11 TableView h...

  • iOS技术文档No.5 AppKit_NSShadow

    NSShadow 保存绘制阴影的类,iOS和macOS都能用,iOS中主要用来为富文本设置阴影,参考iOS技术文档...

  • Swift-圆角与阴影

    iOS中圆角实现非常容易,对比而言,设置阴影则需要设置颜色,偏移位置,阴影透明度,阴影半径: ` /* T...

  • iOS 设置不同位置的阴影

    1. iOS 设置阴影 1.可以系统提供的通过layer几个属性设置阴影. 2.可以通过UIBezierPath ...

  • iOS同时设置圆角和阴影含部分圆角

    阴影和圆角都是CAlayer的特性。在iOS11之前,阴影和圆角基本是不能共存的,设置了圆角,再设置阴影的时候,阴...

  • ios 设置阴影

  • iOS设置阴影

    在通过这样的方式设置阴影时,必须把父视图的masksToBounds属性关掉,因为阴影设置的方式就是加offset...

  • ios 设置阴影

    // // 即阴影颜色值// self.layer.shadowColor = [UIColor co...

  • border 内边框设置圆角

    CSS3 设置盒子三边内阴影、双边内阴影、单边内阴影

网友评论

    本文标题:iOS设置某条边的阴影

    本文链接:https://www.haomeiwen.com/subject/slulcltx.html