1

MKMapViewのレイヤーにドロップシャドウを追加しようとすると問題が発生します。シャドウを表示するには、ビューのclipsToBoundsプロパティをfalseに設定する必要があります。ただし、そうすると、マップタイルがビューの境界の外側に描画され、シャドウが重なり、ビューの一部が切り取られます。結果は次のようになります。

iPhone5.1シミュレータで撮影されたバグのスクリーンショット

境界のクリッピングを無効にせずにドロップシャドウを描画する方法や、この醜い視覚的なバグなしにドロップシャドウを表示する方法があるかどうか疑問に思っています。ドロップシャドウを設定するための私のコードは次のようになります。

self.mapView.layer.borderWidth = 5.0;
self.mapView.layer.borderColor = [[UIColor whiteColor] CGColor];
self.mapView.layer.shadowOffset = CGSizeMake(0.0, 0.0);
self.mapView.layer.shadowColor = [[UIColor blackColor] CGColor];
self.mapView.layer.shadowRadius = 5.0;
self.mapView.layer.shadowOpacity = 0.2;
self.mapView.clipsToBounds = NO;
4

2 に答える 2

4

レイヤーはによって所有されているためMKMapView、通常、自分でレイヤーに触れることはお勧めできません。(これは、後のOSバージョンでは奇妙な方法で壊れ、予測できない方法で動作する可能性が高い種類のものです(新しいiOS 6 3Dマップでもまったく機能するかどうかを確認するのは興味深いでしょう)。 OS Xのバックビューでは、レイヤーに直接触れることは想定されていません(レイヤーホスティングビューでない限り、それは別の議論です))

CALayer下に影を付けるには、マップの下に影を配置して、独自の新しいものを作成します。MKMapViewまたは、を独自のサブビューとしてネストし、UIView代わりに(クリッピングの必要がない)ビューにシャドウを追加します。

于 2012-07-12T08:56:05.613 に答える
2

2 つのビューを作成する必要があります。1 つは影用、もう 1 つは丸みを帯びたコーナー用です。

詳細はこちら:UIView Round Corners with Shadow

于 2012-07-12T09:02:47.587 に答える