添加渐变作为视图顶层的最佳方法是啥?

Posted

技术标签:

【中文标题】添加渐变作为视图顶层的最佳方法是啥?【英文标题】:What is the best way to add a gradient as the top layer of a view?添加渐变作为视图顶层的最佳方法是什么? 【发布时间】:2011-04-22 23:17:58 【问题描述】:

我有一个自定义 UIView 类,我在上面添加了一个 UIScrollView。我想要做的是向 UIView 的图层添加一个渐变,以便在滚动视图上方可见。目前我正在这样做:

[self.layer insertSublayer:self.leftShadowLayer atIndex:[self.layer.sublayers count]];
[self.layer insertSublayer:self.rightShadowLayer atIndex:[self.layer.sublayers count]];

但这似乎有点骇人听闻,并且由于某种原因容易出现问题。是否有任何其他添加子层的首选方式是视图中的顶层,而不管视图层中添加了什么?

谢谢

【问题讨论】:

【参考方案1】:

使用 CGGradientCreateWithColorComponents() 或 CGGradientCreateWithColors() 绘制渐变。 文档位于-

CGGradientRef guide

【讨论】:

呃,我的问题是关于如何绘制渐变以及如何将其设置为顶层?【参考方案2】:

查看示例代码以绘制 CALayer,您可以将其添加到 UIView 的 layer 属性中。

-(void)drawInContext:(CGContextRef)theContext

    

// self.opacity=.5; CGMutablePathRef thePath = CGPathCreateMutable();

//CGPathMoveToPoint(thePath,NULL,100.0f,200.f);

CGPoint aOnePoint=CGPointMake(cgpoint.x,tipPoint.y);
CGPoint aTwoPoint=CGPointMake(cgpoint.x+5,460);
CGPoint aThreePoint=CGPointMake(320,100);
CGPoint aFourPoint=CGPointMake(320,tipPoint.y-25);
CGPoint points[]=aOnePoint,aTwoPoint,aFourPoint;
CGPathAddLines(thePath, NULL,points,3);



CGContextBeginPath(theContext);
CGContextAddPath(theContext, thePath);
//CAGradientLayer here...using the CGCreateGradient methods.


CGContextSetLineWidth(theContext,2.0f);

CGSize theShadowSize = CGSizeMake(4.0f,4.0f);

CGContextSetShadowWithColor(theContext, theShadowSize,3,[UIColor darkGrayColor].CGColor);
CGContextSetFillColorWithColor(theContext,[UIColor redColor].CGColor);
CGContextFillPath(theContext);

CFRelease(thePath);

这样您就可以绘制自己的图层并将其添加到视图的 .layer 属性中。 请注意,我们必须覆盖 - (void)drawInContext:(CGContextRef)theContext 才能拥有自定义层。可能需要打电话

希望对您有所帮助..

【讨论】:

在索引 0 处插入图层以使其成为最顶层。 索引 0 是底层而不是顶层 addSublayer:(CALayer *)layer 方法在您的情况下不起作用吗?

以上是关于添加渐变作为视图顶层的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

添加视频背景视图的最佳做法是啥?

向我的 UIView 添加阴影的最佳方法是啥

将信息从一个集合视图传递到另一个更详细的集合视图的最佳方法是啥

将视图返回到 ArraySeq 的最佳方法是啥?

在 SwiftUI 中将绑定传递给导航堆栈中每个视图的最佳方法是啥

在没有索引视图的情况下,在 SQL Server 中创建复杂视图的最佳方法是啥?