В настоящее время я разрабатываю приложение 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)
}
}
Снимок экрана приложения