Adr*_*lli 40 subview calayer uiimageview uiimage ios
我必须添加一个UIImageView作为MapView的子视图.为此,我在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];
}
Run Code Online (Sandbox Code Playgroud)
Sur*_*gch 131
这是为了未来观众的一般答案.它基于问题标题而不是原始问题的细节.
您layer只需使用其contents属性即可将图像添加到视图中:
myView.layer.contents = UIImage(named: "star")?.cgImage
Run Code Online (Sandbox Code Playgroud)
UIImage需要转换为CGImage.如果您希望在自己的图层中添加图像,可以这样做:
let myLayer = CALayer()
let myImage = UIImage(named: "star")?.cgImage
myLayer.frame = myView.bounds
myLayer.contents = myImage
myView.layer.addSublayer(myLayer)
Run Code Online (Sandbox Code Playgroud)
上面的代码生成了这样的视图.淡蓝色是UIView深蓝色的星星UIImage.
但是,正如您所看到的,它看起来像是像素化的.这是因为UIImage它小于UIView缩放以填充视图,这是默认情况下您不指定任何其他内容.
以下示例显示了图层contentsGravity属性的变化.代码如下所示:
myView.layer.contents = UIImage(named: "star")?.cgImage
myView.layer.contentsGravity = kCAGravityTop
myView.layer.isGeometryFlipped = true
Run Code Online (Sandbox Code Playgroud)
在iOS中,您可能需要设置isGeometryFlipped属性来true,如果你正在做的顶部或底部重力什么,否则这将是你所期望的相反.(只有重力垂直翻转,而不是内容渲染.如果您在翻转内容时遇到问题,请参阅此答案.)
UIView每个contentsGravity设置下面有两个示例,一个视图大于另一个视图,另一个视图UIImage小.这样你就可以看到缩放和重力的影响.
kCAGravityResize
这是默认值.
kCAGravityResizeAspect
kCAGravityResizeAspectFill
kCAGravityCenter
kCAGravityTop
kCAGravityBottom
kCAGravityLeft
kCAGravityRight
kCAGravityTopLeft
kCAGravityTopRight
kCAGravityBottomLeft
kCAGravityBottomRight
Bas*_*ian 45
它一定要是
layer.contents = (id)[UIImage imageNamed:@"myImage.png"].CGImage;
Run Code Online (Sandbox Code Playgroud)
您只能将CGImage放入图层,而不能直接放入UIImage.
我删除了
[layer setNeedsDisplay];
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,但它的确有效!
| 归档时间: |
|
| 查看次数: |
44200 次 |
| 最近记录: |