2

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

4

1 回答 1

1

你不考虑transform。将边界大小设置为帧大小仅适用于变换为“身份”( CGAffineTransformIdentity) 的情况。

我还将检查如何调用观察方法(KVO)。您正在通过一个可观察的设置器center进行更改。bounds

于 2013-01-28T20:30:48.480 回答