UIView setFrame自定义实现

时间:2012-07-04 12:54:41

标签: objective-c uiview override subclass

我有一个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] - 但我有兴趣知道是否有任何后果从不使用超级实现?

1 个答案:

答案 0 :(得分:1)

您没有考虑 transform 。将边界大小设置为帧大小仅在变换为“identity”(CGAffineTransformIdentity)时才适用。

另外,我会检查如何调用观察方法(KVO)。您正在通过可观察的设置器更改centerbounds