UIBezierPath только рисует на чертеже прямой линии в uiimageview - PullRequest
0 голосов
/ 12 октября 2019

вы можете видеть в моем коде, что то, что я рисую, рисует только прямую линию. Я хочу иметь больше контроля над тем, что я рисую. Я не могу нарисовать кривую. Я думаю, что случайно удалил что-то в моем кокде, чтобы вызвать это. Я не знаю, что это такое. Я могу нарисовать небольшую кривую, но она не обладает той гибкостью, которую я ищу.

enter image description here

 class reViewController: UIViewController {


var myLayer = CALayer()
var path = UIBezierPath()
var startPoint = CGPoint()
var touchPoint = CGPoint()




var drawPlace = UIImageView()//The imageview






override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch = touches.first
    if let point = touch?.location(in: drawPlace){
        startPoint = point

    }
}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch = touches.first
    if let point = touch?.location(in: drawPlace){
        touchPoint = point
    }

    path.move(to: startPoint)
    path.addLine(to: touchPoint)
    startPoint = touchPoint
    draw()
}

func draw() {
    let context = UIGraphicsGetCurrentContext()
    context?.setLineWidth(10)
    context?.setLineCap(.square)

    context?.beginPath()

    context?.strokePath()

    drawPlace.clipsToBounds = true
    drawPlace.isMultipleTouchEnabled = true
    let strokeLayer = CAShapeLayer()
    strokeLayer.fillColor = nil
    strokeLayer.lineWidth = 0.5
    strokeLayer.strokeColor = UIColor.blue.cgColor
    strokeLayer.path = path.cgPath
    drawPlace.layer.insertSublayer(strokeLayer, below: myLayer)
    drawPlace.setNeedsDisplay()


    let star:UIImage = UIImage(named: "e.png")!
    let newSize = CGSize(width: star.size.width, height: star.size.height  )

    UIGraphicsBeginImageContextWithOptions(newSize, false, star.scale)



    star.draw(in: CGRect(x: newSize.width/12,
                         y: newSize.height/8,
                         width: newSize.width/1.2,
                         height: newSize.height/1.2),
              blendMode:CGBlendMode.normal, alpha:1)



    let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()


    drawPlace.image = newImage



}


override func viewDidLoad() {
    super.viewDidLoad()

    view.backgroundColor = UIColor.brown

    drawPlace.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(drawPlace)




    draw()



    drawPlace.backgroundColor = UIColor.orange

    NSLayoutConstraint.activate ([




        drawPlace.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
        drawPlace.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -100),
        drawPlace.widthAnchor.constraint(equalToConstant: 300),
        drawPlace.heightAnchor.constraint(equalToConstant: 300),

    ])


}}
...