2015-03-20 3 views
1

Может кто-нибудь объяснить мне, почему в прошивкойМожно ли изменить свойство, чтобы вызвать метод?

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 

кажется, что изменение свойства вызывает метод называть, и, следовательно, перерисовки зрения. Если я использую первое решение, край моего представления заблокирован, иначе, используя вторую часть кода, я получаю другое поведение.

Знаете ли вы, как я могу избежать этой проблемы?

+0

В первом коде преобразование выполняется сначала, а затем устанавливается 'y', а во втором - сначала устанавливается позиция' y', а затем выполняется преобразование. – sasquatch

+0

Да, я знаю это, но мой вопрос немного отличается. Это, на мой взгляд, только назначения статических переменных, которые не влияют на frame.origin. Я не называю методы, и я хотел бы перерисовывать только тогда, когда захочу. – diningphil

+0

Изменение свойства с именем 'myProperty' вызывает вызов метода' setMyProperty: '. –

ответ

0

Как @HotLicks вид адресованного, возможно, что-то происходит в фоновом режиме. Поскольку мы не знаем деталей реализации, трудно сказать с уверенностью.

  • Вариант № 1 будет то, что @HotLicks сказал:
    В этом сценарии есть private свойство, которое вы только в состоянии получить доступ через get и/или set в другой, public вычисленной собственности.
  • Вариант № 2 будет почти таким же:
    Возможно, что в собственности есть willSet и/или didSet наблюдателей за имуществом. Это будет другой подход к тому же принципу, что и в варианте № 1.

Вы, вероятно, не можете этого избежать. Но вы, вероятно, тоже не должны пытаться. Обычно есть причина, почему реализация такая, какая есть. И наличие отдельного get/set или наблюдателей свойств - это метод ограничения ваших действий (программиста) таким образом, чтобы соответствовать данной структуре.

0

Спасибо, я думаю, я решил проблему. В документации указано, что каждый раз, когда изменяется свойство кадра, вызываются такие методы, как setNeedsUpdateConstraints(), и это вызывает перерисовку макета. Я решил избежать изменения непосредственно свойств фрейма, изменяя только dx и dy.

Смежные вопросы