2012-05-04 4 views
3

私は長年にわたりウェブ上のソリューションを探していました。ほとんどのチュートリアルは、UIViewにシャドーを追加することについてかなり簡単です。また、UIImageViewに影を追加すると気付きました。画像自体にアルファチャンネルがある場合、影の形状はコンテンツ画像の形状に完全に適合することができます。たとえば、イメージが透明な背景を持つ動物である場合、影の形もその動物と同じです(UIImageViewフレームと同じ矩形の影ではありません)。UIImageViewにイメージコンテンツの形状に合ったシャドーを追加する方法(ローテーションとシフトエフェクトを使用)

しかし、これでは不十分です。私がする必要があるのは、シャドウにいくつかの変更を加えることです。回転角度と圧縮(スクイーズまたはシフト)エフェクトがあるため、太陽光が特定の場所から来るように見えます。

私が必要としていることを示すために、アップルが作成したGoogle Map Appから取り込んだ2枚の画像をアップロードします。 Annotation PinはPinの形をしたイメージなので、影も「ピン状」ですが、CGSizeで単純に「オフセット」されているわけではありません。高さをわずかに絞った。

私たちがタップ&ホールドしてピンすると、シャドウもピンからアニメーション化されるので、そのようなシャドウをプログラマブルに作成できると思います。

私が今までに見つけた最高のシャドーチュートリアルはhttp://nachbaur.com/blog/fun-shadow-effects-using-custom-calayer-shadowpathsですが、残念ながら、この効果はありません。

誰かが答えを知っているか、検索するためのより良い単語を知っている場合は、私に知らせてください。ありがとうございました。

(画像の形状がそうするプリレンダリング影がオプションではありませんPhotoshopのような任意のツールを使用して、アプリケーションで動的であることに注意してください。)

the annotation pin shadow

the annotation pin shadow when tap and drop

+0

これを行う方法は、ダイナミックライティングのオプションを含む3Dエンジンをプロジェクトに組み込むことです。アプリケーションが完全に2Dであっても、あなたが暗示している概念は、光の位置、影を引き起こすオブジェクト、影が反映される表面に基づく3D問題です。 –

+0

あなたは '.shadowPath'プロパティでの作業を試みたと思いますか? –

+0

はい、shadowPathを試しましたが、UIImageViewのコンテンツの元の形状(透明な背景を持つUIImageです)に基づいてshadowPathを取得することに慣れていません---これはこの質問の要点です。 nachbaur.comのチュートリアルでは、shadowPathの作成について言及しています。しかし、楕円形のシャドーパスや、UIImageView(四角形)に基づくシェイプを作成しています。あなたのコメントのために –

答えて

0

シェイプが何であるか知っていれば、Photoshopなどでシャドウイメージをレンダリングするだけで済みます。

+0

ありがとうございます。 Photoshopを使うことができます。しかし、私の形は動的で、App内のどのような形でもかまいません。そのため、影を事前レンダリングすることはできません。 –

2

このような動的効果を作成するには、Core Graphicsを使用する必要があります。一度使い方が分かれば、非常に強力です。基本的には、コンテキストにスキュー変換を設定し、シャドウを設定してイメージを描画する必要があります。おそらく透明レイヤーも使用する必要があります。

1

CALayerシャドウを使用できるようには聞こえません。これは、特定のユースケースを解決するためです。 Appleが地図上にピンマークを付けるアプローチは、事前に作成された2つの別々の画像(Photoshopなど)を持ち、基準点を基準にマップ内に配置します。

実行時にこれを行う必要がある場合は、コアグラフィックスまたはImageKitのいずれかを使用してこれを実行する必要があります。ぼやけた影の外観を得るには、kCICategoryBlur CIFilterを使用します。イメージをグレースケールに変換できます。圧縮された外観を得るには、画像のサイズを変更して斜めにするだけです。

別々のイメージが2つある場合は、シャドウイメージのCGI​​mageRefを取得し、別のサブレイヤのコンテンツとして設定することも、別のビューとして追加することもできます。

関連する問題