有人可以在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
似乎修改属性会导致调用方法,从而重新绘制视图。 如果我使用第一个解决方案,我的视图边缘被锁定,否则,使用第二段代码,我会获得不同的行为。
你知道我怎么能避免这个问题吗?
答案 0 :(得分:0)
正如@HotLicks所说的那样,背景中可能会发生一些事情。由于我们不了解实施细节,因此很难确定。
private
个属性,您只能通过get
和/或set
在不同的public
计算属性中访问该属性。< / LI>
willSet
和/或didSet
属性观察者。这将是与选项#1中相同原则的不同方法。你可能无法避免这种情况。但你可能不应该尝试。这通常是实现原样的原因。拥有一个单独的get
/ set
或属性观察者是一种以适合给定框架的方式约束你的(程序员)行为的方法。
答案 1 :(得分:0)
谢谢,我想我解决了这个问题。 文档说每次修改frame属性时,都会调用setNeedsUpdateConstraints()等方法,这会导致布局重绘。我解决了避免直接修改框架属性,仅修改dx和dy。