我有一个UIView
的子类,我将其称为MyView
。任何人都可以通过以下方式识别覆盖setFrame
的任何可能的不良副作用:
- (void) setFrame:(CGRect)newFrame {
CGPoint newCentre;
newCentre.x = newFrame.origin.x + newFrame.size.width / 2.f;
newCentre.y = newFrame.origin.y + newFrame.size.height/ 2.f;
[super setCenter:newCentre];
newFrame.origin = CGPointZero;
if (CGSizeEqualToSize(newFrame.size, self.bounds.size) == NO) {
[super setBounds:newFrame];
}
}
我知道以上是一个非常奇怪的实现,并且不希望讨论为什么我没有使用[super setFrame]
- 但我有兴趣知道是否有任何后果从不使用超级实现?
答案 0 :(得分:1)
您没有考虑 transform
。将边界大小设置为帧大小仅在变换为“identity”(CGAffineTransformIdentity
)时才适用。
另外,我会检查如何调用观察方法(KVO)。您正在通过可观察的设置器更改center
和bounds
。