MapViewのサブビューとしてUIImageViewを追加する必要があります。これを行うには、MapViewの上にレイヤーを作成しました。このレイヤーでは、画像を配置したいのですが、白い長方形しか表示されません。画像が表示されません。
これはコードです:
- (void)viewDidLoad
{
//......
CALayer *layer = [CALayer layer];
layer.backgroundColor = [[UIColor whiteColor] CGColor];
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
layer.bounds = CGRectMake(self.mapView.bounds.Origin.x,
self.mapView.bounds.Origin.y, 80, 300);
}
else
{
layer.bounds = CGRectMake(self.mapView.frame.Origin.x,
self.mapView.frame.Origin.y, 150, 700);
}
layer.contents = (id)[UIImage imageNamed:@"myImage.png"];
//the name is correct but in the output the image is not visible
[[self.mapView layer] addSublayer:layer];
[layer setNeedsDisplay];
}
私は削除しました
[layer setNeedsDisplay];
理由はわかりませんが、うまくいきます!
これは、将来の視聴者のための一般的な回答です。元の質問の詳細ではなく、質問のタイトルに基づいています。
layer
プロパティを使用するだけで、ビューのcontents
に画像を追加できます。
myView.layer.contents = UIImage(named: "star")?.cgImage
UIImage
をCGImage
に変換する必要があることに注意してください。画像を独自のレイヤーに追加する場合は、次のようにできます。
let myLayer = CALayer()
let myImage = UIImage(named: "star")?.cgImage
myLayer.frame = myView.bounds
myLayer.contents = myImage
myView.layer.addSublayer(myLayer)
上記のコードは、このようなビューを生成します。明るい青はUIView
で、濃い青の星はUIImage
です。
ただし、ご覧のとおり、ピクセル化されています。これは、UIImage
がUIView
よりも小さいため、ビューを満たすようにスケーリングされているためです。これは、他に何も指定しないデフォルトです。
以下の例は、レイヤーのcontentsGravity
プロパティのバリエーションを示しています。コードは次のようになります。
myView.layer.contents = UIImage(named: "star")?.cgImage
myView.layer.contentsGravity = kCAGravityTop
myView.layer.isGeometryFlipped = true
IOSでは、上または下の重力で何かをしている場合は isGeometryFlipped
プロパティ をtrue
に設定したい場合があります。期待する。 (重力だけが垂直に反転され、コンテンツのレンダリングは反転されません。反転されるコンテンツに問題がある場合は、 this answer を参照してください。)
UIView
の設定ごとに2つのcontentsGravity
の例があります。1つのビューはUIImage
より大きく、もう1つのビューは小さくなります。これにより、スケーリングと重力の効果を確認できます。
kCAGravityResize
これがデフォルトです。
kCAGravityResizeAspect
kCAGravityResizeAspectFill
kCAGravityCenter
kCAGravityTop
kCAGravityBottom
kCAGravityLeft
kCAGravityRight
kCAGravityTopLeft
kCAGravityTopRight
kCAGravityBottomLeft
kCAGravityBottomRight
でなければならない
layer.contents = (id)[UIImage imageNamed:@"myImage.png"].CGImage;
UIImageではなく、CGImageをレイヤーにのみ配置できます。
デフォルトはCGRectZeroであるため、CALayerのフレームを正しく設定する必要があります。
myView.layer.contents = UIImage(named: "star")?. cgImage