2011-12-28 7 views
2

サブビューの1つの上に丸い矩形オーバーレイを作成しようとするUIViewサブクラスがあります。暗黙のアニメーションフェードインが機能しない

私は以下のコードを使用すると、私はそれをしたい場合は、確実に十分な、緑の丸四角形が表示されますが、関係なく、私は何をすべきか、私はそれがフェードインするために得ることはできません。

CALayer *parentLayer = [self layer]; 

// Create a new layer and configure it to be a rounded rect box overlay 
CALayer *layer = [CALayer layer]; 
layer.position = [slider layer].position; 
layer.bounds = CGRectMake(0.0, 0.0, kWTFSliderWidth, kWTFSliderHeight); 
layer.backgroundColor = [UIColor clearColor].CGColor; 
layer.cornerRadius = 5.0; 
layer.borderColor = [UIColor greenColor].CGColor; 
layer.borderWidth = 3.0; 

// Add the layer with a fade in to the parent layer 
[parentLayer addSublayer:layer]; 

ドI親レイヤーオブジェクトに手動でCABasicAnimationを追加する必要がありますか?既定のインスタンスが既にparentLayeraction辞書に存在するはずはありませんか?

+0

を、はい、私は' addSublayerでCATransaction層のスコープを作成し、コミットしようとしています。 –

答えて

3

これであなたaddSublayer:呼び出しに置き換え: `その中:記録のために

layer.hidden = YES; 
[parentLayer addSublayer:layer]; 
[CATransaction flush]; 
layer.hidden = NO; 
+0

もちろん、これはうまくいくのですが、どうしてこのようにしなければならないのですか? 'begin'、' addSublayer'、 'commit'メッセージの順番で十分なはずですか?また、ドキュメントには、 '' flush: ''については、次のようなことがあります。 "しかし、明示的にflushを呼び出さないようにする必要があります。おそらくパフォーマンス上の理由からです。 –

+0

問題は、明示的なトランザクションがフレームワークの暗黙のトランザクション内にネストされていることです。 'flush'メッセージは、暗黙のトランザクションをコミットします。私はあなたの新しいレイヤーの状態は、最も外側のトランザクションがコミットされるまでコミットされず、以前コミットされた値とは異なるプロパティ値をコミットするときにのみ暗黙的なトランザクションを作成すると考えています。私はいくつかのアップルのサンプルコードがフラッシュされていると思う。コアアニメーションに関するWWDCのビデオにも触れられているかもしれません。 WWDCのビデオをお勧めします。 –

+0

もう一度Robに説明してください。もう1つの質問:レイヤの隠しプロパティを「はい」に設定してフェードアウトすると、レイヤツリーからそれを削除する適切な方法は何ですか?私はhidden = YESをやってみた。それに続いて[layer removeFromSuperlayer];が表示されますが、コードがすぐにレイヤーを削除するだけです。 (これは実際には、私がSOスレッドで答えるように依頼したより単純なものを生み出した質問でした)。異なる回答項目で自由に応答してください。 –

関連する問題