相关疑难解决方法(0)

如何使用Core Graphics/iPhone绘制渐变线(淡入/淡出)?

我知道如何绘制一条简单的线条:

CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
CGContextMoveToPoint(context, x, y);
CGContextAddLineToPoint(context, x2, y2);
CGContextStrokePath(context);
Run Code Online (Sandbox Code Playgroud)

我知道如何做一个渐变矩形,ig:

CGColorSpaceRef myColorspace=CGColorSpaceCreateDeviceRGB();
size_t num_locations = 2;
CGFloat locations[2] = { 1.0, 0.0 };
CGFloat components[8] = { 0.0, 0.0, 0.0, 1.0,    1.0, 1.0, 1.0, 1.0 };

CGGradientRef myGradient = CGGradientCreateWithColorComponents(myColorspace, components, locations, num_locations);

CGPoint myStartPoint, myEndPoint;
myStartPoint.x = 0.0;
myStartPoint.y = 0.0;
myEndPoint.x = 0.0;
myEndPoint.y = 10.0;
CGContextDrawLinearGradient (context, myGradient, myStartPoint, myEndPoint, 0);
Run Code Online (Sandbox Code Playgroud)

但是我怎么能画一条渐变的线条,ig从黑色渐变到白色(也可能在另一边渐渐变成黑色)?

iphone gradient core-graphics draw

24
推荐指数
4
解决办法
4万
查看次数

设置新创建的CAShapeLayer的正确框架

简而言之:

  1. Apple没有自动设置frameboundsCAShapeLayer(并且Apple未实现等效[UIView sizeThatFits])
  2. 如果使用路径边界框的大小设置框架......一切都会出错.无论你如何设置它,它都会搞砸道路

那么,什么是编程设定的新创建的框架的正确方法CAShapeLayer与新添加的CGPath?Apple的文档在此事上保持沉默.

我尝试过的东西,不起作用:

  1. 创建一个 CAShapeLayer
  2. 创建一个CGPath,将其添加到图层
  3. 检查图层frame- 它是{{0,0},{0,0}}
  4. 组: layer.frame = CGPathGetBoundingBox( layer.path )
  5. 帧现在是正确的,但路径现在是DOUBLE偏移 - 改变frame路径有效地移动一个额外的(x,y)像素

  6. 组: layer.bounds = CGPathGetBoundingBox( layer.path )

  7. ......一切都疯了.没有任何意义了
  8. 尝试修复它 layer.position = CGPathGetBoundingBox( layer.path ).origin
  9. ...没有骰子; 仍然坚果.

有一件事我尝试过DID可以工作,但会导致其他地方出现问题:

编辑:一旦您自动旋转屏幕,这个BREAKS.我的猜测:Apple的自动旋转需要控制"转换"属性.

  1. 创建一个 CAShapeLayer
  2. 创建一个CGPath,将其添加到图层
  3. 检查图层的框架 - 它是 {{0,0},{0,0}}
  4. 组: layer.frame = CGPathGetBoundingBox( layer.path )
  5. 组: layer.transform = CGAffineTransformMakeTranslation( CGPathGetBoundingBox( …

calayer cashapelayer cgpath

16
推荐指数
1
解决办法
4117
查看次数

使用UIBezierPath遮罩UIView-仅描边

更新02有一个可行的解决方案...

我正在尝试使用UIBezierPath的笔触作为另一个UIView上的蒙版。有很多示例,但是它们都使用填充来剪辑视图。

我试图仅使用路径的笔触,但显示不正确。

以下是我目前在Swift 3.x中拥有的功能:

let bezierPath = UIBezierPath()
bezierPath.move(to: CGPoint(x: 0, y: 0))
bezierPath.addLine(to: CGPoint(x: 100, y: 100))
bezierPath.addLine(to: CGPoint(x: 200, y: 50))
bezierPath.addLine(to: CGPoint(x: 300, y: 100))
bezierPath.lineWidth = 5.0
bezierPath.stroke()

let gradient = Gradient(frame: self.bounds)
let mask = CAShapeLayer()

mask.path = bezierPath.cgPath
gradient.layer.mask = mask

self.addSubview(gradient)
Run Code Online (Sandbox Code Playgroud)

但是,上面的代码可以做到这一点。我正在寻找仅将笔划用作蒙版...这是代码当前正在执行的操作

正在做..

这是理想的结果。 期望的结果

(此comp快照中还有更多点)

我意识到,可能会有更好的方法,欢迎任何想法或替代方案!


-更新01--

我的最新作品,但掩盖了一切:

let bezierPath = UIBezierPath()
bezierPath.move(to: CGPoint(x: 0, y: 0))
bezierPath.addLine(to: CGPoint(x: 100, y: 100))
bezierPath.addLine(to: CGPoint(x: 200, y: 50))
bezierPath.addLine(to: CGPoint(x: 300, y: 100))
bezierPath.lineWidth …
Run Code Online (Sandbox Code Playgroud)

ios swift

5
推荐指数
1
解决办法
1830
查看次数

标签 统计

calayer ×1

cashapelayer ×1

cgpath ×1

core-graphics ×1

draw ×1

gradient ×1

ios ×1

iphone ×1

swift ×1