2012-04-16 8 views
0

私は何かのサブレイヤであるカスタムレイヤーを持っています。問題は、私のレイヤーは、私がdrawLayer:inContext:になるまでサイズが分かりません。drawLayerでカスタムCALayerの境界を更新しています:inContext:

私がの場合、私の層の境界/フレームを変更しないと、すべてが完全に描画されます。

フレーム/境界を変更する行を追加すると、背景が完全に見えますが、コンテンツが存在しません。新しい(大きな)境界の代わりにコンテンツが元の境界を切り取っているように見えるので、背景だけは見えます。

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context { 
    CGFloat initialGraphContentsWidth = graph.frame.size.width - graph.leftMargin; 
    CGFloat initialGraphContentsHeight = graph.frame.size.height - graph.bottomMargin - graphHelper.topMargin; 

    self.frame = CGRectMake(0, 0, initialGraphContentsWidth, initialGraphContentsHeight); 
    self.position = CGPointMake(graphHelper.leftMargin + 1, graphHelper.topMargin + 1); 
    self.backgroundColor = [UIColor greenColor].CGColor; 

    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor); 
    CGContextAddRect(context, CGRectMake(0, 0, 20, 20)); 
} 

私はどのように私の境界を動的に変更し、私のコンテンツを表示するには?

私はCATransactionを0の時間間隔で設定しようとしましたが、何もしませんでした。

答えて

0

フレーム/境界を更新した後にsetNeedsDisplayを呼び出してみましたか?

あなたはlayerと呼ばれるCALayerを持っていたのであれば、たとえば、次のことを試みることができる:

layer.frame = CGRectMake(20, 40, 100, 300); 
// tell the layer that it needs to refreshed 
[layer setNeedsDisplay]; 
+0

'' drawLayerになりsetNeedsDisplay':inContext'が呼ばれています。だから、 'setNeedsDisplay'を呼び出すことは最悪の場合、無限ループとなり、最高のAppleのコードが問題を認識して呼び出しを無視するだけです。 – DBD

関連する問題