ios - 在 CALayer 中添加 UIImage

标签 ios uiimageview uiimage calayer subview

我必须添加一个 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

enter image description here

不过,如您所见,它看起来像素化了。这是因为 UIImageUIView 小,所以它被缩放以填充 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

这是默认值。

enter image description here

kCAGravityResizeAspect

enter image description here

kCAGravityResizeAspectFill

enter image description here

kCAGravityCenter

enter image description here

kCAGravityTop

enter image description here

kCAGravityBottom

enter image description here

kCAGravityLeft

enter image description here

kCAGravityRight

enter image description here

kCAGravityTopLeft

enter image description here

kCAGravityTopRight

enter image description here

kCAGravityBottomLeft

enter image description here

kCAGravityBottomRight

enter image description here

相关

关于ios - 在 CALayer 中添加 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13272512/

相关文章:

ios - Meteor Cordova 启动时间慢得离谱?

ios - 我的应用目前在 iPhone 6/iPhone 6 plus 上的表现如何?

iphone - 通过 UIPasteBoard 在短信中粘贴图像

ios - 如何在 iOS 中使用 UIImagePickerController 从 photoGallery 获取视频?

objective-c - 如何管理 iPhone 5 的背景图像?

ios - 如何将不均匀的 UIImage 扭曲成一定比例

ios - 具有 3D 旋转功能的 CAEmitterCell

ios - SpriteKit 节点旋转问题

Swift:无法将 ImageView 置于 ScrollView 中心

ios - 缩小tableView单元格中的图标图像