[解決済み] UIViewにドロップシャドウを追加する最適な方法は?
質問
私は、互いに重なり合ったビューにドロップシャドウを追加しようとしていますが、ビューは他のビューのコンテンツを見ることができるように崩壊します。
view.clipsToBounds
をオンにしておき、ビューが折りたたまれたときにそのコンテンツが切り取られるようにしたいのです。
これは、レイヤーにドロップシャドウを追加することを難しくしているようです。
clipsToBounds
をオンにすると、影も切り取られます。
を操作してみたのですが
view.frame
と
view.bounds
を使用して、フレームにドロップ シャドウを追加し、それを包含するのに十分な大きさの境界を許可する必要がありますが、これには失敗しました。
シャドウを追加するために使用しているコードは次のとおりです (このコードは
clipsToBounds
OFFで動作します)
view.clipsToBounds = NO;
view.layer.shadowColor = [[UIColor blackColor] CGColor];
view.layer.shadowOffset = CGSizeMake(0,5);
view.layer.shadowOpacity = 0.5;
これは、一番明るいグレーのレイヤーに影を適用したときのスクリーンショットです。このスクリーンショットを見れば、次のような場合にコンテンツがどのように重なるかがわかると思います。
clipsToBounds
がオフの場合に、コンテンツがどのように重なるかを示しています。
の影を付けるにはどうしたらよいでしょうか。
UIView
に影を付け、コンテンツを切り取ったままにするにはどうしたらよいでしょうか?
編集:私はまた、影をつけた背景画像を使用して遊んでいることを追加したかったのですが、それはうまく機能します。
どのように解決するのですか?
これを試してみてください。
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:view.bounds];
view.layer.masksToBounds = NO;
view.layer.shadowColor = [UIColor blackColor].CGColor;
view.layer.shadowOffset = CGSizeMake(0.0f, 5.0f);
view.layer.shadowOpacity = 0.5f;
view.layer.shadowPath = shadowPath.CGPath;
まず最初に
: は
UIBezierPath
として使われる
shadowPath
は重要です。 これを使用しない場合、最初は違いに気づかないかもしれませんが、鋭い観察眼で、デバイスの回転などのイベント時に発生する一定の遅延を観察できます。これは重要なパフォーマンス調整です。
あなたの問題に関して特に
: 重要な行は
view.layer.masksToBounds = NO
. これは
ビューのレイヤーのサブレイヤー
のクリッピングを無効にします。
の違いは何なのでしょうか?
masksToBounds
(レイヤー上) とビュー自身の
clipToBounds
というプロパティがあります。実はないんです。一方を切り替えると、他方にも影響があります。ただ、抽象化のレベルが違うだけです。
Swift 2.2です。
override func layoutSubviews()
{
super.layoutSubviews()
let shadowPath = UIBezierPath(rect: bounds)
layer.masksToBounds = false
layer.shadowColor = UIColor.blackColor().CGColor
layer.shadowOffset = CGSizeMake(0.0, 5.0)
layer.shadowOpacity = 0.5
layer.shadowPath = shadowPath.CGPath
}
Swift 3です。
override func layoutSubviews()
{
super.layoutSubviews()
let shadowPath = UIBezierPath(rect: bounds)
layer.masksToBounds = false
layer.shadowColor = UIColor.black.cgColor
layer.shadowOffset = CGSize(width: 0.0, height: 5.0)
layer.shadowOpacity = 0.5
layer.shadowPath = shadowPath.cgPath
}
関連
-
[エラー処理】iOSのエラー、アーキテクチャx86_64の未定義シンボルについて
-
[解決済み] Cocoa:フレームとバウンドはどう違うの?
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] iOS7でスタイルUITableViewStyleGroupedを持つUITableViewの上部に余分なパディングがあるのはなぜですか?
-
[解決済み] SwiftでUIAlertViewを作成するにはどうしたらいいですか?
-
[解決済み] 要素の片側にボックスシャドウを追加するにはどうすればよいですか?
-
[解決済み] UIViewの角丸とドロップシャドウ?
-
[解決済み] NSNotificationCenterのaddObserver in Swift
-
[解決済み] UIViewの下に影を描くには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
クラッシュエラー libc++abi.dylib: NSException 型のキャッチできない例外で終了_allanGold のブログ - ProgrammerITS401
-
iOSコンパイルポッドでエラー CocoaPods could not find compatible versions for pod "XXXXX" が報告される。
-
[解決済み] App Storeのアプリと連動させる方法
-
[解決済み] UIViewController のビューが表示されているかどうかを確認する方法
-
[解決済み] IBOutletsはARCのもとで強くなるべきか、弱くなるべきか?
-
[解決済み] UIButtonのタイトルを左揃えにするにはどうしたらよいですか?
-
[解決済み] コードサインエラーです。期限切れのプロファイルを削除した後、プロビジョニングプロファイルが見つからない
-
[解決済み] iPadマルチタスクのサポートには、これらの方向が必要です。
-
[解決済み] セキュリティで保護されたWebサービスにもアクセスするiOSアプリで、Facebook認証を行うためのデザイン
-
[解決済み] Swiftのプロトコルでオプションのメソッドを定義するには?