0

shadowOffset、shadowRadius、shadowColor などの CALayer シャドウ プロパティは、3.2 未満の iPhone OS バージョンでは使用できません。3.1 以下で使用するためにその機能をどのように模倣できるか疑問に思っています。

これを使用して、ドロップ シャドウを UIViews にクリーンな方法で追加できるようにして-(void)drawRect:(CGRect)rect、実際のビュー フレームを縮小して対応する必要があるビューのメソッドで描画するのではなく、レイヤー レベルでシャドウを描画できるようにしたいと考えています。影の多い。(この縮小アプローチは、SO で見つけた他の UIView ドロップ シャドウ関連の質問で提案されています)。

階層化されたアプローチがよりクリーンになると考えていました。たとえば、別のシャドウ レイヤーをサブレイヤーとして追加するサブクラス化 CALayer を作成しようとしましたが、それはメイン レイヤーをバッキング レイヤーとして持つ UIView の drawRect: メソッドで描画されたものの上に描画されます。

また、サブクラス CALayer の drawInContext を実装してみました: このようなもの、

- (void)drawInContext:(CGContextRef)ctx {
// code to draw shadow for a frame the size of the layer's frame        
[super drawInContext:ctx];
}

しかし、その後、シャドウはコンテキストの現在のクリッピング バウンディング ボックスにクリップされたままになります。これは、レイヤー自体のフレームのようです。

また、メインレイヤーの描画をサブレイヤーにリダイレクトするというアイデアもありました。サブレイヤーは、影が描かれた別のサブレイヤーの上に配置されます。その後、おそらくクリッピングを取り除くと、影が最も遠くなります. しかし、それをどのように行うかについて頭を悩ませることはできませんでした。

これをどうやって進めるかについてのアイデアはありますか?私の UIView ドロップ シャドウ関連の質問が、ここ SO で見つけた他の質問とどのように異なるかを明確にするためです。影に対応するために UIView の実際の描画フレームを縮小したくありません。クリッピングされずに、背景の別のレイヤーに何らかの形で配置したい.

4

1 に答える 1

0

影をシミュレートする画像を作成し、それをスケーリングするだけで、おそらく自動的に任意のビューへのポインターを与えることができます。次に、そのビューが持つスーパービューで自動的に調整され、その下に配置されます。

これはかなりうまく機能します。影は画面サイズの約 50% である必要があるため、平均的な拡大/圧縮はほとんど見えません。半径が大きい場合、スケーリングされているかどうかはわかりません。

于 2010-05-28T16:08:29.023 に答える