2012-01-09 4 views
0

私は影の効果を持つレイヤーを作成しています。私のビューのレイヤーにサブレイヤとして追加する代わりに、それを描きたいと思います。しかし、影の効果で描くことができないという問題があります。問題は、コンテキストサイズがレイヤーサイズに基づいていることです。しかし、どのように文脈のためのrectを設定するのですか?上記のコードではCALayerのコンテキストに数ピクセルを加えたコンテキストを取得する方法は?

CALayer *layer = [CALayer layer]; 
layer.frame = ...; 
layer.backgroundColor = [UIColor redColor].CGColor; 
layer.cornerRadius = 2.0; 
layer.masksToBounds = NO; 
layer.shadowColor = [[UIColor whiteColor] CGColor]; 
layer.shadowOffset = CGSizeMake(0, 1); 
layer.shadowRadius = 0.5; 
layer.shadowOpacity = 0.2; 
[self.layer addSublayer:layer]; 
UIGraphicsBeginImageContext(layer.bounds.size); 
[layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
[viewImage drawAtPoint:CGPointMake(0, 0)]; 
[layer removeFromSuperlayer]; 

、私は何を取得していますことは箱ですが、(すべての4つの側面に)影とパディングのいくつかの余分なピクセルなし。私がImageContextのサイズを大きくすると、高さと幅が増えますが、まだx = 0、y = 0から始まり、x = -5、y = -5などから始めることができますそれ。

enter image description here

おかげでたくさん!

+0

あなたはおそらくそれのためのあなたの理由を持っているが、なぜあなただ​​けの最初の画像に変換せず、直接、レイヤーを使用していませんか?それはあなたの問題を解決するでしょう。 – fishinear

+0

ええ、私はただ私のビューに直接フラット画像を描画することを好むでしょう。 – runmad

+0

@runmadレイヤを使用するのではなく、画像を描画する理由に興味がありますか? – ocodo

答えて

5

xとyの両方でコンテクストを10ピクセル大きくします。

レイヤーを描画する前に、CGContextTranslateCTM(context、5,5)を実行します。

希望すると便利です。

+0

これはまったくやりがいのないようです。レイヤーをxとyの方向に移動するだけですが、コンテキスト領域は展開しません。 – runmad

+0

OK、考え出しました。これを使用する場合は、イメージコンテキストのサイズを大きくする必要があります。 – runmad

+1

前述のように、xとyの両方でコンテクストを10ピクセル大きくします。 – Nico

0

あなたの問題が次のようなものかどうかはわかりませんが、目を引くだけです。

[self.layer addSublayer:layer]; 
UIGraphicsBeginImageContext(layer.bounds.size); 
[layer renderInContext:UIGraphicsGetCurrentContext()]; 

このファイルには、作成したシャドウレイヤーを追加するレイヤーというプロパティがあります。次に、self.layerとは対照的に、現在のCALayerに基づいてコンテキストを取得します。

私は通常、UIImageViewを変更するためにCALayerを使用しています。サブレイヤーを追加する必要はないため、おそらくそのコードは問題ありません。ちょうどそれを指摘したい、私はいつも学ぶのが好きなので、どちらの方法が正確であるかを教えてください。

〜グッドラック

+0

ありがとうございます。私はsuperLayerからレイヤーを取り除きますが、廃棄する前にそのレイヤーからコンテキストを取得するだけで済むので必要でした。 – runmad

関連する問題