0

私はこれを理解することはできません。

私には見解があります。

それはスピードメーターです。

スピードメーターに針を入れました:

- (id) initWithFrame: (CGRect) frame
{    
    self = [super initWithFrame: frame]; // [super initWithCoder: coder];
    if (! self)
        return nil;

    :
    :
    : 
    self.needle = [ [ [Needle alloc] initWithMaxRadius: 0.5*300

    [self.layer addSublayer: needle.layer];

    self.needle.layer.position = CGPointMake( frame.size.width / 2, frame.size.height / 2 );

    return self;
}

針オブジェクトには CALayer プロパティが含まれています。

針は、フレームごとに自分自身を配置します。独自の表示リンク ハンドラーを設定し、このレイヤーで変換を実行します。

突然、ビューの layoutSubviews メソッドがフレームごとにヒットします。

この振る舞いが理解できません。

このメソッドがヒットする SUPERview の変更を理解できます。しかし、サブレイヤーはどのようにこれを強制できますか?

確かに、サブレイヤーはその親に翻弄されるべきですか?

設定してみた

self.autoresizesSubviews = NO;

これは明らかに効果がありません

私が探している物件は

self.getsAutoresizedBySubviewsOrLayers = NO;

何が起こっている?

4

1 に答える 1

1

サブビューを追加するlayoutSubviewsと、サブビュー、そのターゲット、およびターゲットのすべてのサブビューで呼び出されます。

ここで、 layoutSubviews が呼び出されるのはいつですか? という質問で詳細を見つけることができます。

ちなみに、上記のコードではメモリ リークが発生している可能性があります。

が保持されたプロパティである場合needle、この行により過剰な保持が発生します。

self.needle = [ [ [Needle alloc] initWithMaxRadius: 0.5*300

self.一般に、init メソッドでは" " を参照しない方がよいでしょう。

于 2011-10-03T14:17:25.420 に答える