2011-10-20 7 views
5

私はカルーセルの中にCAGradientLayerをバックグラウンドとして使って一連のビューを持っています。カルーセルは、テクスチャ付きの背景の上に座っている。私は選択されたビューを表示するために背景を三角で突き上げるように求められてきました。主な背景と必ずしも一致しないので、私は背景テクスチャを持つ三角形の画像を使用することはできません。私は現在のビューの背景から切り欠きを切り取り、テクスチャの背景がノッチから見えるようにしたいと思います。CALayerからノッチを切り取るにはどうすればよいですか?

どうすればよいですか?ポリゴンレイヤーを作ることは可能ですか?

答えて

10

私はCAShapeLayerを使用してそれを行うことができましたが見つかりました:

CAShapeLayer *mask = [[[CAShapeLayer alloc] init] autorelease]; 
mask.frame = backgroundLayer.bounds; 
mask.fillColor = [[UIColor blackColor] CGColor]; 

CGFloat width = backgroundLayer.frame.size.width; 
CGFloat height = backgroundLayer.frame.size.height; 

CGMutablePathRef path = CGPathCreateMutable(); 

CGPathMoveToPoint(path, nil, 0, 0); 
CGPathAddLineToPoint(path, nil, width, 0); 
CGPathAddLineToPoint(path, nil, width, height); 
CGPathAddLineToPoint(path, nil, (width/2) + 5, height); 
CGPathAddLineToPoint(path, nil, width/2, height - 5); 
CGPathAddLineToPoint(path, nil, (width/2) - 5, height); 
CGPathAddLineToPoint(path, nil, 0, height); 
CGPathAddLineToPoint(path, nil, 0, 0); 
CGPathCloseSubpath(path); 

mask.path = path; 
CGPathRelease(path); 

backgroundLayer.mask = mask; 
-3

多角形レイヤーを作成することはできますか?

私はこれについてどのように行くべき?

マスクを使用してください - マスクと同じサイズで、ビットが切り取られたpng画像 - これにより、CALayerにはチャンクカットが表示されます。 (ただし、カットアウトが大きければ、そうではないので、後ろにあるものに触れようとするかもしれませんが、これはうまくいかないでしょう)。

詳細については、documentation(およびstackoverflowを検索)を参照してください。

+0

私は本当にPNGマスクを使用することはできません - ビューは動的にサイズです。 – Simon

+0

Quartz描画APIを使用してマスクを動的に作成する - http://www.codeproject.com/KB/iPhone/iOSGetStarted01.aspx – deanWombourne

+0

レイヤー自体は常に長方形(Appleのドキュメント)なので、これは正当な答えです。 .pngイメージは実行可能なソリューションです。 –

0

多角形のレイヤーを描くことはできません。しかし、私は期待した結果が2つの異なる方法を用いて達成することができると信じている: -

  1. あなたのイメージは、同じサイズのものであるなら、あなたはあなたのあたりとの間(または外に透明ノッチでPNG画像を使用することができます慾望)。

  2. 塗りつぶし矩形と透明な三角形ポリゴンを描画します。次に、ポリゴン(四角形と三角形)の両方を交差させる必要があります。結果として得られたShapeはカルーセル画像上に配置する必要があります。この方法の利点は、必要に応じてポリゴンのサイズと形状を動的に変更できることです。

希望します。

関連する問題