Может ли изменение свойства вызвать метод?
Может кто-нибудь объяснить мне, почему в iOS
var dx = (touchPoint.x - dragTouch.x) * self.transform.a
var dy = (touchPoint.y - dragTouch.y) * self.transform.d
self.transform.tx = self.transform.tx + dx
self.transform.ty = self.transform.ty + dy
if ( self.frame.origin.y > 70){ // lock upper edge during drag
self.frame.origin.y = 70
}
отличается от
var dx = (touchPoint.x - dragTouch.x) * self.transform.a
var dy = (touchPoint.y - dragTouch.y) * self.transform.d
if ( self.frame.origin.y > 70){ // lock upper edge during drag
self.frame.origin.y = 70
}
self.transform.tx = self.transform.tx + dx
self.transform.ty = self.transform.ty + dy
Кажется, что изменение свойства вызывает вызов метода и, следовательно, перерисовку представления. Если я использую первое решение, край моего взгляда блокируется, в противном случае, используя второй кусок кода, я получаю другое поведение.
Вы знаете, как я могу избежать этой проблемы?
2 ответа
Как сказал @HotLicks, вероятно, что-то происходит в фоновом режиме. Поскольку мы не знаем деталей реализации, сложно сказать с уверенностью.
- Вариант №1 будет таким, как сказал @HotLicks:
В этом сценарии естьprivate
собственность, к которой вы можете получить доступ только черезget
и / илиset
в другом,public
компьютерная собственность. - Вариант № 2 будет почти таким же:
Возможно, что собственность имеетwillSet
и / илиdidSet
наблюдатели за недвижимостью. Это был бы другой подход к тому же принципу, что и в варианте № 1.
Вы, вероятно, не можете избежать этого. Но вы, вероятно, не должны пытаться либо. Обычно есть причина, почему реализация такая, какая она есть. И иметь отдельный get
/set
или наблюдатели свойств - это метод ограничения ваших (программистских) действий таким образом, чтобы они подходили к данной среде.
Спасибо, думаю, я решил проблему. В документации говорится, что каждый раз, когда изменяется свойство фрейма, вызываются такие методы, как setNeedsUpdateConstraints(), и это вызывает перерисовку макета. Я решил избегать прямого изменения свойств фрейма, изменяя только dx и dy.