In my swift code below the designable square is created when the user drags a box. Lets say the user draws one box. What I would like to do then is then call func center and have that box center on the center x axis. I am struggling to figure this out since I dont work with designable's much. The gif below represents know what the code is doing.
import UIKit class ViewController: UIViewController { var centerB = UIButton() var rectangles: [Rectangle] = [] override func viewDidLoad() { super.viewDidLoad() [centerB].forEach{ $0.translatesAutoresizingMaskIntoConstraints = false view.addSubview($0) } centerB.addTarget(self, action: #selector(center), for: .touchDown) centerB.frame = CGRect(x: 100, y: 300, width: 100, height: 100) centerB.backgroundColor = .purple view.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(pan))) } @objc func pan(_ gesture: UIPanGestureRecognizer) { switch gesture.state { case .began: let rectangle = Rectangle(frame: .init(origin: gesture.location(in: view), size: .init(width: 0, height: 0))) rectangle.fillColor = .red rectangle.strokeColor = .white rectangle.lineWidth = 3 view.addSubview(rectangle) rectangles.append(rectangle) case .changed: let distance = gesture.translation(in: view) let index = rectangles.index(before: rectangles.endIndex) let frame = rectangles[index].frame rectangles[index].frame = .init(origin: frame.origin, size: .init(width: frame.width + distance.x, height: frame.height + distance.y)) rectangles[index].setNeedsDisplay() gesture.setTranslation(.zero, in: view) case .ended: break default: break } } @objc func center(){ } } @IBDesignable class Rectangle: UIView { @IBInspectable var fillColor: UIColor = .red @IBInspectable var strokeColor: UIColor = .yellow @IBInspectable var lineWidth: CGFloat = 3 override func draw(_ rect: CGRect) { let path = UIBezierPath(rect: rect) fillColor.set() path.fill() strokeColor.set() path.lineWidth = lineWidth path.stroke() } override func didMoveToSuperview() { addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(pan))) } @objc func pan(_ gesture: UIPanGestureRecognizer) { frame.translate(gesture.translation(in: self)) gesture.setTranslation(.zero, in: self) setNeedsDisplay() } } extension CGPoint { static func +=(lhs: inout CGPoint, rhs: CGPoint) { lhs.x += rhs.x lhs.y += rhs.y } } extension CGRect { mutating func translate(_ translation: CGPoint) { origin += translation } } https://stackoverflow.com/questions/66756298/center-designable-cgrect-object-using-function March 23, 2021 at 10:08AM

没有评论:
发表评论