Я выяснил большую часть проблемы относительно того, почему прямоугольник не двигался. Оказывается, я неправильно понял, как работают переменные и сеттеры в Swift. Тем не менее, я изменил этот код:
var rectangle: CGRect {
get {
return CGRect(x: 200,
y: 200,
width: frame.width / 6,
height: 15)
}
set {}
}
будет lazy
переменной:
lazy var rectangle: CGRect = {
return CGRect(x: 200,
y: 200,
width: self.frame.width / 6,
height: 15)
}()
Причина, по которой мне сначала понадобились get
и set
, заключалась в том, что я использовал frame
в своих вычислениях переменных, и это было недоступно до полного создания экземпляра самого представления. Я также немного подправил этот код:
rectangle = CGRect(x: rectangle.midX + translation.x, y: rectangle.midY + translation.y, width: rectangle.width, height: rectangle.height)
и использовал minX
вместо midX
:
rectangle = CGRect(x: rectangle.minX + translation.x, y: rectangle.minY + translation.y, width: rectangle.width, height: rectangle.height)
Это потому, что CGRect
инициализируется с параметрами x и y, равными minX
и minY
.
Это хороший прогресс (по крайней мере, прямоугольник движется). Однако я не могу понять, почему прямоугольник меняет местами только после того, как отпустил мышь, что приводит к прерывистому движению.