我必须添加一个 UIImageView 作为 MapView 的 subview 。为此,我在 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];
}
最佳答案
为了 future 的观众,这是一个一般性的答案。它基于问题标题而不是原始问题的详细信息。
如何将 UIImage 添加到 CALayer
您可以通过使用其 contents
属性将图像添加到 View 的 layer
:
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)
修改外观
上面的代码产生了这样的 View 。浅蓝色是 UIView
,深蓝色星星是 UIImage
。
不过,如您所见,它看起来像素化了。这是因为 UIImage
比 UIView
小,所以它被缩放以填充 View ,如果您没有指定任何其他内容,这是默认设置。
下面的示例显示了层的 contentsGravity
属性的变体。代码如下所示:
myView.layer.contents = UIImage(named: "star")?.cgImage
myView.layer.contentsGravity = kCAGravityTop
myView.layer.isGeometryFlipped = true
在 iOS 中,您可能需要设置 isGeometryFlipped
property如果您正在使用顶部或底部重力做任何事情,则为 true
,否则它将与您的预期相反。 (只有重力被垂直翻转,而不是内容呈现。如果您在翻转内容时遇到问题,请参阅 this answer。)
对于每个 contentsGravity
设置,下面有两个 UIView
示例,一个 View 比 UIImage
大,另一个比 UIImage
小。这样您就可以看到缩放和重力的影响。
kCAGravityResize
这是默认值。
kCAGravityResizeAspect
kCAGravityResizeAspectFill
kCAGravityCenter
kCAGravityTop
kCAGravityBottom
kCAGravityLeft
kCAGravityRight
kCAGravityTopLeft
kCAGravityTopRight
kCAGravityBottomLeft
kCAGravityBottomRight
相关
关于ios - 在 CALayer 中添加 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13272512/