2012-03-28 9 views
15

)この現象の理由は検索されましたが見つかりませんでした。CALayerボーダーがサブビューより上に表示されています(Zオーダー関連、

私は画像が設定されているUIButtonを持っています。ボタンの表示方法は次のとおりです。これは意図したボタンのデザインだけフォトショップであることに注意してください:

enter image description here

基本的に、それは白のボーダーと少し周囲の影の正方形カスタムUIButtonがあります。右上隅には、プログラムでサブビューとして追加される「X」マークがあります。

実際のアプリ内のボタンのスクリーンショットです。この時点で、私は唯一のサブビューとして、影やXマークを追加しました:

enter image description here

どのように、私はここにそれがどのように見えるかで、白のボーダーを追加しようとすると:

enter image description here

白い枠線がXマークサブレイヤの上に表示されているようです。どうしてか分かりません。ここで

は、私が使用していたコードです:境界線がdeleteMarkサブビューの上に表示されている理由

// selectedPhotoButton is the UIButton with UIImage set earlier 
// At this point, I am adding in the shadow 
[selectedPhotoButton layer] setShadowColor:[[UIColor lightGrayColor] CGColor]]; 
[[selectedPhotoButton layer] setShadowOffset: CGSizeMake(1.0f, 1.0f)]; 
[[selectedPhotoButton layer] setShadowRadius:0.5f]; 
[[selectedPhotoButton layer] setShadowOpacity:1.0f]; 

// Now add the white border  
[[selectedPhotoButton layer] setBorderColor:[[UIColor whiteColor] CGColor]]; 
[[selectedPhotoButton layer] setBorderWidth:2.0]; 

// Now add the X mark subview 
UIImage *deleteImage = [UIImage imageNamed:@"nocheck_photo.png"]; 
UIImageView *deleteMark = [[UIImageView alloc] initWithFrame:CGRectMake(53, -5, 27, 27)]; 
deleteMark.contentMode = UIViewContentModeScaleAspectFit; 
[deleteMark setImage:deleteImage]; 
[selectedPhotoButton addSubview:deleteMark]; 
[deleteMark release]; 

私は理解していません。意図した効果を得る方法はありますか?

ありがとうございました! CALayer上のAppleのドキュメントから

+0

境界線を設定する代わりに、描画してみてください。 – tipycalFlow

+0

@tipycalFlowなぜですか? –

+0

@returntrueこれはかなり古くなっていますが、私は描画命令を制御するように頼んでいたと思います。 – tipycalFlow

答えて

16

境界はborderWidthにより、受信者の範囲からインセットを描かれています。受信者のコンテンツとサブレイヤの上に合成され、cornerRadiusプロパティの効果が含まれます。

あなたが望む効果を得るために、私はあなたが自分のサブビュー/サブレイヤに画像を入れて、そのサブレイヤのborderWidthプロパティを設定示唆しています。私は同様の問題があった

+0

可能であれば、疑似コードで明確にすることはできますか?イメージはUIButtonのイメージとして設定されています。これを避けることを意味しますか? – kurisukun

+4

'selectedPhotoButton'と' deleteMark'に共通のスーパービューを作成するだけです。つまり、 'selectedPhotoButton'のサブビューとして' deleteMark'を追加せず、新しい 'UIView'に両方を追加してください。 – MrMage

2

(私はサブビューの上にあることを境界線を予防したい)

CAShapeLayer * _border = [CAShapeLayer layer]; 
_border.strokeColor = [UIColor colorWithRed:119/255.0f green:119/255.0f blue:119/255.0f alpha:1.0f].CGColor; 
_border.fillColor = nil; 
[bgRoundView.layer addSublayer:_border]; 
_border.path = [UIBezierPath bezierPathWithRoundedRect:bgRoundView.bounds cornerRadius:20.f].CGPath; 
3

あなたが-1に層のZPOSITIONを設定することができます。それは私のために働いた。

関連する問題