2021年3月22日星期一

center designable cgrect object using function

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.

enter image description here

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

没有评论:

发表评论