Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift游乐场调用UIBezier大纲?_Swift_Uibezierpath - Fatal编程技术网

如何在Swift游乐场调用UIBezier大纲?

如何在Swift游乐场调用UIBezier大纲?,swift,uibezierpath,Swift,Uibezierpath,编辑:对不起,我本来不清楚。我想得到直线或形状的“轮廓”路径。我特别想了解如何使用: context.replacePathWithStrokedPath() 和/或: CGPathRef CGPathCreateCopyByStrokingPath(CGPathRef path, const CGAffineTransform *transform, CGFloat lineWidth, CGLineCap lineCap, CGLineJoin lineJoin, CGFloat mite

编辑:对不起,我本来不清楚。我想得到直线或形状的“轮廓”路径。我特别想了解如何使用:

context.replacePathWithStrokedPath()
和/或:

CGPathRef CGPathCreateCopyByStrokingPath(CGPathRef path, const CGAffineTransform *transform, CGFloat lineWidth, CGLineCap lineCap, CGLineJoin lineJoin, CGFloat miterLimit);

我不是在找解决办法,谢谢

=====

我真的很想画一条有轮廓的线。我用的是UIBezier,但遇到了砖墙。到目前为止,我得到了这个:

import UIKit
import PlaygroundSupport

let screenWidth = 375.0 // points
let screenHeight = 467.0 // points

let centerX = screenWidth / 2.0
let centerY = screenHeight / 2.0

let screenCenterCoordinate = CGPoint(x: centerX, y: centerY)

class LineDrawingView: UIView {
override func draw(_ rect: CGRect) {
    let path = UIBezierPath()
    path.lineWidth = 5
    path.lineCapStyle = .round

    //Move to Drawing Point
    path.move(to: CGPoint(x:20, y:120))
    path.addLine(to: CGPoint(x:200, y:120))

    path.stroke()

    let dot = UIBezierPath()
    dot.lineWidth = 1
    dot.lineCapStyle = .round

    dot.move(to: CGPoint(x:200, y:120))
    dot.addArc(withCenter: CGPoint(x:200, y:120), radius: 5, startAngle: CGFloat(0.0), endAngle: CGFloat(8.0), clockwise: true)

    UIColor.orange.setStroke()
    UIColor.orange.setFill()
    path.stroke()
    dot.fill()

    let myStrokedPath = UIBezierPath.copy(path)

    myStrokedPath().stroke()

  }

}


let tView = LineDrawingView(frame: CGRect(x: 0,y: 0, width: screenWidth, height: screenHeight))
tView.backgroundColor = UIColor.white

PlaygroundPage.current.liveView = tView
那么,我在这方面哪里做错了?我似乎不知道在哪里使用CGPathCreateCopyByStrokingPath…或者如何

编辑2:

好的,现在我有了这个。再靠近一点,但我如何再次填充路径

    let c = UIGraphicsGetCurrentContext()!

    c.setLineWidth(15.0)

    let clipPath = UIBezierPath(arcCenter: CGPoint(x:centerX,y:centerY), radius: 90.0, startAngle: -0.5 * .pi, endAngle: 1.0 * .pi, clockwise: true).cgPath

    c.addPath(clipPath)
    c.saveGState()
    c.replacePathWithStrokedPath()

    c.setLineWidth(0.2)
    c.setStrokeColor(UIColor.black.cgColor)
    c.strokePath()

该类稍作修改以生成此图形:

未在修改的代码中复制路径。而是使用现有路径进行绘制,然后进行修改和重用。圆点没有笔划,因此添加了。因为只有封闭的路径可以填充,所以我通过改变线宽在较厚的路径上绘制了较薄的路径

这是修改后的代码:

class LineDrawingView: UIView {
  override func draw(_ rect: CGRect) {
    let path = UIBezierPath()
    path.lineWidth = 7
    path.lineCapStyle = .round

    //Move to Drawing Point
    path.move(to: CGPoint(x:20, y:120))
    path.addLine(to: CGPoint(x:200, y:120))

    path.stroke()

    let dot = UIBezierPath()
    dot.lineWidth = 1
    dot.lineCapStyle = .round

    dot.move(to: CGPoint(x:200, y:120))
    dot.addArc(withCenter: CGPoint(x:200, y:120), radius: 5, startAngle: CGFloat(0.0), endAngle: CGFloat(8.0), clockwise: true)

    dot.stroke()

    UIColor.orange.setStroke()
    UIColor.orange.setFill()
    path.lineWidth = 5
    path.stroke()
    dot.fill()

  }

}

该类稍作修改以生成此图形:

未在修改的代码中复制路径。而是使用现有路径进行绘制,然后进行修改和重用。圆点没有笔划,因此添加了。因为只有封闭的路径可以填充,所以我通过改变线宽在较厚的路径上绘制了较薄的路径

这是修改后的代码:

class LineDrawingView: UIView {
  override func draw(_ rect: CGRect) {
    let path = UIBezierPath()
    path.lineWidth = 7
    path.lineCapStyle = .round

    //Move to Drawing Point
    path.move(to: CGPoint(x:20, y:120))
    path.addLine(to: CGPoint(x:200, y:120))

    path.stroke()

    let dot = UIBezierPath()
    dot.lineWidth = 1
    dot.lineCapStyle = .round

    dot.move(to: CGPoint(x:200, y:120))
    dot.addArc(withCenter: CGPoint(x:200, y:120), radius: 5, startAngle: CGFloat(0.0), endAngle: CGFloat(8.0), clockwise: true)

    dot.stroke()

    UIColor.orange.setStroke()
    UIColor.orange.setFill()
    path.lineWidth = 5
    path.stroke()
    dot.fill()

  }

}
所以,我找到了答案。我使用了CAShapeLayer:

let c = UIGraphicsGetCurrentContext()!

    c.setLineCap(.round)
    c.setLineWidth(15.0)

    c.addArc(center: CGPoint(x:centerX,y:centerY), radius: 90.0, startAngle: -0.5 * .pi, endAngle: (-0.5 * .pi) + (3 / 2 * .pi ), clockwise: false)

    c.replacePathWithStrokedPath()

    let shape = CAShapeLayer()
    shape.path = c.path
    shape.fillColor = UIColor.yellow.cgColor
    shape.strokeColor = UIColor.darkGray.cgColor
    shape.lineWidth = 1

    myView.layer.addSublayer(shape)
它可以很好地工作,但在重叠的层上不起作用。我需要学习如何连接轮廓或其他东西。

所以,我找到了答案。我使用了CAShapeLayer:

let c = UIGraphicsGetCurrentContext()!

    c.setLineCap(.round)
    c.setLineWidth(15.0)

    c.addArc(center: CGPoint(x:centerX,y:centerY), radius: 90.0, startAngle: -0.5 * .pi, endAngle: (-0.5 * .pi) + (3 / 2 * .pi ), clockwise: false)

    c.replacePathWithStrokedPath()

    let shape = CAShapeLayer()
    shape.path = c.path
    shape.fillColor = UIColor.yellow.cgColor
    shape.strokeColor = UIColor.darkGray.cgColor
    shape.lineWidth = 1

    myView.layer.addSublayer(shape)
它可以很好地工作,但在重叠的层上不起作用。我需要学习如何连接轮廓或其他东西