标签: cagradientlayer

将CAGradient掩码层应用于UITextView

我有一个带可滚动文本的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程序中,但我看不到其中包含的任何文本.

我缺少什么想法?

objective-c uitextview cagradientlayer

4
推荐指数
1
解决办法
4060
查看次数

在MKPolyLineView中绘制CAGradient

我的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 =红色).有任何想法如何获得折线的渐变?(高色,中心色,低色)

感谢大家.

objective-c calayer ios cagradientlayer

4
推荐指数
1
解决办法
1101
查看次数

在iOS中,在白色上绘制透明到白色渐变

我有一个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显示了同样的事情:

PaintCode截图

为什么是这样?似乎渐变不应该只是在白色的顶部可见.

transparency linear-gradients drawrect ios cagradientlayer

4
推荐指数
1
解决办法
1615
查看次数

如何使用CAGradientLayer绘制渐变色轮?

我从这些链接中得到了一些参考 -

我已经经历了"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()是私人活动的角度来绘制路径.

这是我的代码的最终输出 …

core-graphics ios uibezierpath cagradientlayer swift3

4
推荐指数
1
解决办法
1191
查看次数

为什么UITableViewCell中的渐变层不能覆盖整个框架?

我尝试使用长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)

我的代码有问题吗?

uitableview uiview ios cagradientlayer swift

4
推荐指数
2
解决办法
1432
查看次数

UILabel添加GradientLayer

要向UILabel添加背景渐变,请使用以下代码.

在使用渐变之前,UILabel看起来像这样.

WithOut Gradient

现在,要添加渐变,我使用以下代码.

   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)

uilabel ios cagradientlayer

3
推荐指数
1
解决办法
5874
查看次数

带角度的CAGradientLayer

我画CGPath的不是矩形或正方形,而是添加CGPathCAShapeLayer.这CAShapeLayer是从CGPath使用中获得的框架CGPathGetBoundingBox(path).所以它将是矩形或方形.现在我想将渐变颜色设置为图层,但我的路径不是矩形或正方形,因此它不会在整体上均匀地传播渐变颜色CGPath.有没有办法将渐变颜色设置为CGPath或如何设置渐变颜色与角度?

请参考截图了解情况.这里白色表示框架CGPath和绿色,这是我们绘制的CGPath.在底部CGPath你可以看到不均匀分布的白色渐变色CGPath.

在此输入图像描述

在此输入图像描述

cashapelayer ios cagradientlayer

3
推荐指数
1
解决办法
2711
查看次数

Autolayout没有传递给子层

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开发人员可以很容易地理解;)

iphone calayer ios cagradientlayer autolayout

3
推荐指数
1
解决办法
2065
查看次数

CAGradientLayer导致子视图不可见

你好iOS和Swift的大师,

经过两个令人沮丧的日子,我拼命地决定在这里问.问题:

添加CAGradientLayer时,不显示子视图.

细节:

  • 我已经创建了一个方法来在UIView的扩展中添加CAGradientLayer
  • 我只是在任何视图上调用该方法,这本身就很有效
  • 但是如果我尝试在视图层次结构中使用此方法作为UIView(作为背景),遗憾的是所有子视图都不再可见,渐变似乎"过度"了所有子视图
  • 如果我没有在容器视图上调用"addGradient"方法,则所有子视图都会正确显示
  • 惊人的细节:虽然子视图不可见,但它们以某种方式存在并且"活跃"(例如"隐形"UIButton激发")
  • 我正在使用Autolayout

任何想法将不胜感激!提前致谢.

ios cagradientlayer swift

3
推荐指数
1
解决办法
1036
查看次数

渐变并没有填满所有的UIView

我想创建一个渐变图层并将其插入视图中,但视图未完全填充...

我的实际代码是:

    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的初学者,所以一切皆有可能!

编辑:问题不是视图的大小,而是图层的大小太小,因为视图的背景颜色填充所有空间而不是图层

iphone uiview ios cagradientlayer swift

3
推荐指数
1
解决办法
1727
查看次数