【发布时间】:2019-11-05 19:45:49
【问题描述】:
我正在继承UIView,并试图在屏幕上来回“拖动”CGRect。基本上,我每次拖动手指时都想移动(重绘)矩形。到目前为止,我有这个代码:
var rectangle: CGRect {
get {
return CGRect(x: 200,
y: 200,
width: frame.width / 6,
height: 15)
}
set {}
}
override func draw(_ rect: CGRect) {
let gesture = UIPanGestureRecognizer(target: self, action: #selector(dragRectangle(recognizer:)))
addGestureRecognizer(gesture)
drawRectangle(rect)
}
func drawRectangle(_ rect: CGRect) {
let path = UIBezierPath(rect: rectangle)
UIColor.black.set()
path.fill()
}
@objc func dragRectangle(recognizer: UIPanGestureRecognizer) {
let translation = recognizer.translation(in: self)
rectangle = CGRect(x: rectangle.midX + translation.x, y: rectangle.midY + translation.y, width: rectangle.width, height: rectangle.height)
setNeedsDisplay()
recognizer.setTranslation(CGPoint.zero, in: self)
}
这是我第一次使用UIPanGestureRecognizer,所以我不确定其中的所有细节。我在drawRectangle 中设置了断点并确认它正在被调用。但是,无论我尝试拖动多少次,屏幕上的矩形都不会移动。怎么了?
【问题讨论】:
-
不要在
draw方法中添加UIPanGestureRecognizer,添加到init方法中。否则手势会被添加多次。
标签: swift uigesturerecognizer drag uipangesturerecognizer cgrect