iOS:在 UIView 中绘制阴影

Posted

技术标签:

【中文标题】iOS:在 UIView 中绘制阴影【英文标题】:iOS: Draw shadow within UIView 【发布时间】:2011-11-08 04:31:57 【问题描述】:

我发现了一些很棒的代码,它是UIView 的子类,它用阴影绘制了该视图。然后我可以在任何我想放置阴影的地方使用该视图:

-(void) layoutSubviews 
    CGFloat coloredBoxMargin = 40;
    CGFloat coloredBoxHeight = self.frame.size.height;
    _coloredBoxRect = CGRectMake(coloredBoxMargin, 0, 40, coloredBoxHeight);


-(void) drawRect:(CGRect)rect 

    CGColorRef lightColor =  [UIColor colorWithRed:105.0f/255.0f green:179.0f/255.0f blue:216.0f/255.0f alpha:0.8].CGColor;
    CGColorRef shadowColor = [UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:0.4].CGColor;   

    CGContextRef context = UIGraphicsGetCurrentContext();
    // Draw shadow
    CGContextSaveGState(context);
    CGContextSetFillColorWithColor(context, lightColor);
    CGContextSetShadowWithColor(context, CGSizeMake(-13, 0), 10, shadowColor);

    CGContextFillRect(context, _coloredBoxRect);
    CGContextRestoreGState(context);

使用以下创建:

UIViewWithShadowRight* verticalLineView2 = [[[UIViewWithShadowRight alloc] initWithFrame:CGRectMake(60, 0, 40 , self.view.frame.size.height)] autorelease];
[verticalLineView2 setBackgroundColor:[UIColor clearColor]];
[verticalLineView2 setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
[verticalLineView2 setClipsToBounds:NO];
[self.view addSubview:verticalLineView2];
[self.view bringSubviewToFront:verticalLineView2];

问题是,阴影是从右向左绘制的,我该如何反转它并从左向右绘制?

【问题讨论】:

【参考方案1】:

13 设为正数而不是负数。即绘制阴影的 x 偏移量,负值在原图左侧,正值在右侧。

【讨论】:

不,这似乎没有帮助。它使阴影消失。 显示您的代码。这是您正在寻找的实际答案,因此如果您看到不同的结果,可能是由于您在图形上下文中更改了一些其他设置。 乔纳森,我用用于创建视图的代码更新了我的帖子。 绘图仍被裁剪到视图的边界,因此阴影不会绘制到它之外。使视图比其内容更宽。【参考方案2】:

尝试改变这个 CGContextSetShadowWithColor(context, CGSizeMake(-13, 0), 10, shadowColor); 将当前的 x 值 (-13) 替换为右侧的值。

【讨论】:

以上是关于iOS:在 UIView 中绘制阴影的主要内容,如果未能解决你的问题,请参考以下文章

在 UIScrollView 下方绘制阴影(滚动 UIView)

如何在UIView下绘制阴影

如何在蒙面的 UIView 周围绘制阴影?

CGContextSetShadowWithColor:UIView中阴影翻转

如何在 ios 中绘制自定义 UIView?

FreeShadow - 绘制不规则阴影