添加的UIImage中的CALayer(add UIImage in CALayer)

2019-06-19 00:49发布

I must add a UIImageView as subview of MapView. To do this I created a layer above the MapView. In this layer I want to put my image, but I get a white rectangle and nothing else. My image is not visible.

This is the code:

- (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];
}

Answer 1:

这是未来的观众着想一概而论。 它是基于问题的标题,而不是原来的问题的细节。

如何一个UIImage添加到CALayer的

您可以添加到一个视图的图像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 ,如果你正在做的顶部或底部重力什么,否则这将是你所期望的相反。 (只有重力垂直翻转,而不是内容呈现。如果你有被翻动与内容的麻烦,看到这个答案 。)

有两个UIView下面对每个实例contentsGravity设置,一个视图是比较大UIImage ,另一个是小。 这样,您就可以看到缩放和重力的影响。

kCAGravityResize

这是默认的。

kCAGravityResizeAspect

kCAGravityResizeAspectFill

kCAGravityCenter

kCAGravityTop

kCAGravityBottom

kCAGravityLeft

kCAGravityRight

kCAGravityTopLeft

kCAGravityTopRight

kCAGravityBottomLeft

kCAGravityBottomRight

有关

  • 的视图的内容属性模式
  • 绘制UIImagedrawRectCGContextDrawImage
  • CALayer的教程:入门


Answer 2:

它一定要是

layer.contents = (id)[UIImage imageNamed:@"myImage.png"].CGImage;

你只能把一个CGImage成层,而不是直接的UIImage。



Answer 3:

我删除了

 [layer setNeedsDisplay];

我不知道为什么,但它的工程!



Answer 4:

您需要正确设置的CALayer的框架,因为默认是CGRectZero。



Answer 5:



文章来源: add UIImage in CALayer