我有一个带可滚动文本的UITextView.我正在尝试对其应用渐变图层,因此可见文本的底部总是略微淡出.
这是我的代码:
CAGradientLayer *maskLayer = [CAGradientLayer layer];
maskLayer.colors = [NSArray arrayWithObjects:(id)[[UIColor clearColor] CGColor], (id)[[UIColor yellowColor] CGColor], nil];
maskLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.2],
[NSNumber numberWithFloat:0.8],
[NSNumber numberWithFloat:1.0], nil];
maskLayer.bounds = clueTextView.bounds;
myUITextView.layer.mask = maskLayer;
Run Code Online (Sandbox Code Playgroud)
现在,这导致UITextViewLayer完全透明 - 我看到UITextViewLayer作为子视图的UIView的背景颜色.虽然我可以选择并复制文本以粘贴到notes程序中,但我看不到其中包含的任何文本.
我缺少什么想法?
我的MKPolyLineView只有一个问题.我只是尝试为Polyline创建一个颜色渐变,但是使用CAGradient它会起作用.我将MKPolylineView子类化并重新绘制
- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
UIColor *darker = [UIColor blackColor];
CGFloat baseWidth = self.lineWidth / zoomScale;
// draw the dark colour thicker
CGContextAddPath(context, self.path);
CGContextSetStrokeColorWithColor(context, darker.CGColor);
CGContextSetLineWidth(context, baseWidth * 1.5);
CGContextSetLineCap(context, self.lineCap);
CGContextStrokePath(context);
// now draw the stroke color with the regular width
CGContextAddPath(context, self.path);
CGContextSetStrokeColorWithColor(context, self.strokeColor.CGColor);
CGContextSetLineWidth(context, baseWidth);
CGContextSetLineCap(context, self.lineCap);
CGContextStrokePath(context);
[super drawMapRect:mapRect zoomScale:zoomScale inContext:context];
}
Run Code Online (Sandbox Code Playgroud)
但即使这样也行不通(StrokeColor =红色).有任何想法如何获得折线的渐变?(高色,中心色,低色)
感谢大家.
我有一个iOS应用程序,主屏幕上有文字滚动.我希望文本在屏幕底部淡出.所以我制作了一个自定义视图并执行以下操作drawRect:
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat gradLocs[] = {0, 1};
CGColor *color1 = [UIColor clearColor].CGColor;
CGColor *color2 = [UIColor whiteColor].CGColor;
CFArrayRef arr = (CFArrayRef)@[(id)color1, (id)color2];
CGGradientRef grad = CGGradientCreateWithColors(colorSpace, arr, gradLocs);
CGContextSaveGState(context);
CGContextDrawLinearGradient(context, grad, CGPointMake(0, 0), CGPointMake(0, rect.size.height), 0);
CGContextRestoreGState(context);
Run Code Online (Sandbox Code Playgroud)
基本上,在视图上绘制从清晰到白色的线性渐变.我也尝试过这样做CAGradientLayer:
CAGradientLayer *layer = [CAGradientLayer layer];
layer.colors = @[(id)[UIColor clearColor].CGColor, (id)[UIColor whiteColor].CGColor];
layer.locations = @[@(0), @(1)];
layer.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
[self.layer insertSublayer:layer atIndex:0];
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,如果这被绘制在白色的顶部,我会变灰.PaintCode显示了同样的事情:

为什么是这样?似乎渐变不应该只是在白色的顶部可见.
我从这些链接中得到了一些参考 -
我已经经历了"HSV色彩空间"的概念.但我想借助于使用RGB绘制色轮CAGradientLayer.
这是使用简单的RGB颜色数组制作色轮的代码片段UIBezierPath-
func drawColorWheel()
{
context?.saveGState()
range = CGFloat(100.00 / CGFloat(colorArray.count))
for k in 0 ..< colorArray.count
{
drawSlice(startPercent: CGFloat(k) * range, endPercent: CGFloat(CGFloat(k + 1) * range), color: colorArray.object(at: k) as! UIColor)
}
context?.restoreGState()
}
func drawSlice(startPercent: CGFloat, endPercent: CGFloat, color: UIColor)
{
let startAngle = getAngleAt(percentage: startPercent)
let endAngle = getAngleAt(percentage: endPercent)
let path = getArcPath(startAngle: startAngle, endAngle: endAngle)
color.setFill()
path.fill()
}
Run Code Online (Sandbox Code Playgroud)
凡getAngleAt()和getArcPath()是私人活动的角度来绘制路径.
这是我的代码的最终输出 …
我尝试使用长UIView制作一个标准的渐变上下。但是还不满。这笔尖的UITableViewCell的一部分,所以我没有获得viewDidLayoutSubviews()在这个线程。
我试图contentView.layoutIfNeeded()从此视图的代码版本中调用。我在调用UITableView cellForRowAtIndexPath时调用了它。但这没有效果。
我准备中的渐变awakeFromNib()。
let colors = [
UIColor(red: 33/255.0, green: 33/255.0, blue: 33/255.0, alpha: 1.0).cgColor,
UIColor(red: 51/255.0, green: 51/255.0, blue: 51/255.0, alpha: 1.0).cgColor]
let gradient = CAGradientLayer()
gradient.frame = gradientView.bounds
gradient.colors = colors
gradientView.layer.insertSublayer(gradient, at: 0)
Run Code Online (Sandbox Code Playgroud)
我的代码有问题吗?
要向UILabel添加背景渐变,请使用以下代码.
在使用渐变之前,UILabel看起来像这样.

现在,要添加渐变,我使用以下代码.
CAGradientLayer *gradLayer=[CAGradientLayer layer];
gradLayer.frame=self.myView.layer.bounds;
[gradLayer setColors:[NSArray arrayWithObjects:(id)([UIColor redColor].CGColor), (id)([UIColor cyanColor].CGColor),nil]];
gradLayer.endPoint=CGPointMake(1.0, 0.0);
[self.myView.layer addSublayer:gradLayer];
Run Code Online (Sandbox Code Playgroud)
UILabel然后如下,但没有文字.

我也尝试在UILabel图层的底部添加图层,但没有成功.
[self.myView.layer insertSublayer:gradLayer atIndex:0];
Run Code Online (Sandbox Code Playgroud) 我画CGPath的不是矩形或正方形,而是添加CGPath到CAShapeLayer.这CAShapeLayer是从CGPath使用中获得的框架CGPathGetBoundingBox(path).所以它将是矩形或方形.现在我想将渐变颜色设置为图层,但我的路径不是矩形或正方形,因此它不会在整体上均匀地传播渐变颜色CGPath.有没有办法将渐变颜色设置为CGPath或如何设置渐变颜色与角度?
请参考截图了解情况.这里白色表示框架CGPath和绿色,这是我们绘制的CGPath.在底部CGPath你可以看到不均匀分布的白色渐变色CGPath.


我Xamarin用于iOSv5.8.3(版本3).
我在另一个谎言中添加了UIView一个:CAGradientLayerUIView
public static void AddGradientView (CGColor color1, CGColor color2, UIView view) {
UIView gradientView = new UIView (view.Bounds);
gradientView.BackgroundColor = UIColor.Green;
gradientView.AutoresizingMask = UIViewAutoresizing.All;
CAGradientLayer gradient = new CAGradientLayer ();
gradient.Frame = gradientView.Bounds;
gradient.Colors = new CGColor[]{ color1, color2 };
gradientView.Layer.InsertSublayer (gradient, 0);
view.AddSubview (gradientView);
}
Run Code Online (Sandbox Code Playgroud)
但结果是这样的:

问题是梯度层,他frame不适合想要的UIView.我认为这是一个Autolayout问题.
任何人都可以对我说些什么吗?
提前致谢!
PS上面写的代码objective sharpie但是iOS开发人员可以很容易地理解;)
你好iOS和Swift的大师,
经过两个令人沮丧的日子,我拼命地决定在这里问.问题:
添加CAGradientLayer时,不显示子视图.
细节:
任何想法将不胜感激!提前致谢.
我想创建一个渐变图层并将其插入视图中,但视图未完全填充...
我的实际代码是:
gradientLayer.frame = topView.bounds
gradientLayer.colors = [UIColor.white.cgColor, UIColor.black.cgColor]
topView.layer.insertSublayer(gradientLayer, at: 0)
Run Code Online (Sandbox Code Playgroud)
我不知道它..它适用于全屏视图,但不是更多的小视图..
当然,顶视图是从故事板导入的.也许我在view.bound中犯了一个错误我不知道.我是swift和iOS的初学者,所以一切皆有可能!
编辑:问题不是视图的大小,而是图层的大小太小,因为视图的背景颜色填充所有空间而不是图层
cagradientlayer ×10
ios ×9
swift ×3
calayer ×2
iphone ×2
objective-c ×2
uiview ×2
autolayout ×1
cashapelayer ×1
drawrect ×1
swift3 ×1
transparency ×1
uibezierpath ×1
uilabel ×1
uitableview ×1
uitextview ×1