修改属性会导致调用方法吗?

时间:2015-03-20 18:06:59

标签: ios swift properties affinetransform

有人可以在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 个答案:

答案 0 :(得分:0)

正如@HotLicks所说的那样,背景中可能会发生一些事情。由于我们不了解实施细节,因此很难确定。

  • 选项#1将是@HotLicks所说的:
    在该方案中,有private个属性,您只能通过get和/或set在不同的public计算属性中访问该属性。< / LI>
  • 选项#2几乎相同:
    该属性可能包含willSet和/或didSet属性观察者。这将是与选项#1中相同原则的不同方法。

你可能无法避免这种情况。但你可能不应该尝试。这通常是实现原样的原因。拥有一个单独的get / set或属性观察者是一种以适合给定框架的方式约束你的(程序员)行为的方法。

答案 1 :(得分:0)

谢谢,我想我解决了这个问题。 文档说每次修改frame属性时,都会调用setNeedsUpdateConstraints()等方法,这会导致布局重绘。我解决了避免直接修改框架属性,仅修改dx和dy。