iOS: удалить последнее изображение в массиве после завершения касания - PullRequest
0 голосов
/ 21 мая 2018

Я создаю приложение для рисования iOS и пытаюсь реализовать кнопку отмены, чтобы удалить линию, нарисованную пользователем.Я создал массив изображений в переменной:

var images = [UIImage]()

Каждый раз, когда пользователь проводит пальцем по экрану и убирает палец с экрана, в функции touchesEnded создается новое изображение.Я думаю, что мне нужно удалить последнее изображение, чтобы получить предыдущее изображение в IBAction, которое будет действовать как кнопка отмены.

Вот пример моего текущего кода:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    let touch = touches.first!
    guard touch.view != floaty else { return }



    swiped = false
    if let touch = touches.first{
        postBtn.isEnabled = true
        postBtn.setImage(UIImage(named: "done_icon_moved"), for: .normal)


        dismissBtn.isEnabled = true

        undoBtn.isEnabled = true
        undoBtn.setImage(UIImage(named: "undo_icon_moved"), for: .normal)


        lastPoint = touch.location(in: self.view)

    }
}

func drawLineFrom(fromPoint: CGPoint, toPoint: CGPoint) {

    // 1
    UIGraphicsBeginImageContext(view.frame.size)

    tempImageView.image?.draw(in: CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height))
    let context = UIGraphicsGetCurrentContext()
    // 2

    context?.move(to: CGPoint(x: fromPoint.x, y: fromPoint.y))
    context?.addLine(to: CGPoint(x: toPoint.x, y: toPoint.y))

    // 3

    context?.setBlendMode(CGBlendMode.normal)
    context?.setLineCap(CGLineCap.round)
    context?.setLineWidth(brushWidth)
    context?.setStrokeColor(UIColor(red:red, green:green, blue:blue, alpha: 1.0).cgColor)

    // 4
    context?.strokePath()

    // 5
    tempImageView.image = UIGraphicsGetImageFromCurrentImageContext()
    tempImageView.alpha = opacity
    UIGraphicsEndImageContext()

}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    swiped = true
    if let touch = touches.first {
        let currentPoint = touch.location(in: view)
        drawLineFrom(fromPoint: lastPoint, toPoint: currentPoint)
        lastPoint = currentPoint


    }
}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    if !swiped {
        // draw a single point
        drawLineFrom(fromPoint: lastPoint, toPoint: lastPoint)

    }

    // Merge tempImageView into mainImageView


    UIGraphicsBeginImageContext(mainImageView.frame.size)
    mainImageView.image?.draw(in: CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height),blendMode: CGBlendMode.normal, alpha: 1.0)
    tempImageView.image?.draw(in: CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height), blendMode: CGBlendMode.normal, alpha: opacity)
    mainImageView.image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    tempImageView.image = nil

    print("touch ended")

}

1 Ответ

0 голосов
/ 21 мая 2018

Проверьте, есть ли в массиве изображений объекты или нет, прежде чем удалять последний объект.

if images.count != 0 {
   images.removeLast()
}
...