2

と呼ぶサブクラスがUIViewありますMyViewsetFrame次の方法でオーバーライドすることの望ましくない副作用を誰でも特定できますか。

- (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 )がどのように呼び出されるかを確認します。あなたは変化centerboundsていて、観察可能なセッターによっています。

于 2013-01-28T20:30:48.480 に答える