iOS приложение для рисования, перемещения, удаления прямоугольников над картинками - PullRequest
0 голосов
/ 31 марта 2020

В настоящее время я разрабатываю приложение iOS для аннотации изображений в Swift. Идея состоит в том, чтобы нарисовать прямоугольники поверх изображения, чтобы пометить некоторые области перед отправкой данных на сервер для вычислений машинного обучения. Обратите внимание, что я новичок в iOS программировании, и мои навыки довольно ограничены.

Мне удалось нарисовать прямоугольники, создав UIImageView для каждого из них. Я правильно прикрепил жесты, чтобы переместить и удалить их.

Вопросы: 1 - Я работаю с UIImageView, чтобы создать прямоугольники, но я заметил, что UIBezierpath также можно использовать. Какой из них лучше?

2 - Есть ли способ, которым я мог бы создать некую динамическую c структуру, хранящую информацию о прямоугольнике UIImageView (имя UIView, координаты центра, размеры и др. c.). Таким образом, каждый раз, когда пользователь удаляет или добавляет новый прямоугольник, я могу соответствовать структуре.

Вот мой код:

    import UIKit

    class ViewController: UIViewController {

        var windowLabelWidth = 100
        var windowLabelHeight = 100

        let btnLabelRadius = 50

    override func viewDidLoad() {
        super.viewDidLoad()

        let button = UIButton()

        button.frame = CGRect(x: 200, y: 800, width: 40, height: 40)
        button.backgroundColor = .red
        button.setTitle("+", for: .normal)
        button.layer.cornerRadius = 20
        button.clipsToBounds = true
        button.addTarget(self, action: #selector(ViewController.buttonAction), for: .touchUpInside)

        view.addSubview(button)
    }

    @objc func didLongPress(sender: UILongPressGestureRecognizer) {
        let fileView = sender.view!
        fileView.removeFromSuperview()
    }

    @objc func didPan(sender: UIPanGestureRecognizer) {
          let fileView = sender.view!
          moveViewWithPan(view: fileView, sender: sender)
      }

    @objc func buttonAction(sender: UIButton!) {
        let rectView = UIImageView()

        rectView.frame = CGRect(x: 300, y: 150, width: windowLabelWidth, height: windowLabelHeight)
        rectView.center = view.center
        rectView.layer.borderWidth = 2.0
        rectView.layer.borderColor = UIColor.red.cgColor
        rectView.isUserInteractionEnabled = true

        view.addSubview(rectView)

        addPanGesture(view: rectView)
        addLongPressGesture(view: rectView)
    }

    func addPanGesture(view: UIView) {
        let pan = UIPanGestureRecognizer(target: self, action: #selector(ViewController.didPan))
        view.addGestureRecognizer(pan)
    }

    func addLongPressGesture(view: UIView) {
        let longPress = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.didLongPress))
        longPress.minimumPressDuration = 1
        view.addGestureRecognizer(longPress)
    }

    func moveViewWithPan(view: UIView, sender: UIPanGestureRecognizer) {
        let translation = sender.translation(in: view)
        view.center = CGPoint(x: view.center.x + translation.x, y: view.center.y + translation.y)
        sender.setTranslation(CGPoint.zero, in: view)
    }
}

Снимок экрана приложения

...