在CALayer中添加UIImage

2024-01-04

我必须添加 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];
}

这是为了未来观众的一般性答案。它基于问题标题而不是原始问题的详细信息。

如何将 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财产 https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CALayer_class/#//apple_ref/occ/instp/CALayer/geometryFlipped to true如果你用顶部或底部重力做任何事情,否则它会与你期望的相反。 (仅垂直翻转重力,而不是内容渲染。如果您在翻转内容时遇到问题,请参阅这个答案 https://stackoverflow.com/a/34407999/3681880.)

那里有两个UIView下面的例子适用于每个contentsGravity设置,一个视图大于UIImage另一个较小。这样您就可以看到缩放和重力的影响。

kCAGravityResize

这是默认设置。

kCAGravityResizeAspect

kCAGravityResizeAspectFill

kCAGravityCenter

kCAGravityTop

kCAGravityBottom

kCAGravityLeft

kCAGravityRight

kCAGravityTopLeft

kCAGravityTopRight

kCAGravityBottomLeft

kCAGravityBottomRight

Related

  • 视图的内容模式属性 https://stackoverflow.com/a/32151862/3681880
  • 画一个UIImage in drawRect with CGContextDrawImage https://stackoverflow.com/a/34407999/3681880
  • CALayer 教程:入门 http://www.raywenderlich.com/90488/calayer-in-ios-with-swift-10-examples
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在CALayer中添加UIImage 的相关文章

随机推荐

  • 没有实体框架的 ASP.NET 身份

    是否可以在不使用实体框架的情况下使用新的 ASP NET Identity 而是使用您自己的方法 我有一个 MVC 项目 它使用普通的 ADO NET 进行数据访问 我想实现 ASP NET 身份 但我想继续使用 ADO NET 和存储过程
  • Grunt 多任务在构建时抛出 EISDIR 错误

    我正在尝试设置 grunt 来缩小 src 目录中的一些 js 文件并将它们复制到构建目录 继grunt 任务文档 https github com gruntjs grunt wiki Configuring tasks 我相信下面的配置
  • 如何将单元素列表转换为java 8可选

    如何很好地将包含一个或零个元素的列表转换为可选 丑陋的代码 List
  • 布尔读写在 Swift 中是否能保证原子性?

    假设我有一个应用程序正在从一个线程写入布尔值并从另一个线程读取相同的布尔值 我不在乎我的阅读线程是否读取过时的值 这在所有 ARM 内核和 x86 上安全吗 我不想遇到一个问题 即我的读取线程读取了部分写入的值 后续问题 哪些 swift
  • 阻止 geom_密度_ridges 显示不存在的尾部值

    当我使用geom density ridges 该图通常最终会显示数据中不存在的值的长尾 这是一个例子 library tidyverse library ggridges data lincoln weather Remove all n
  • 从 ASP.Net Core OData 项目中 Swashbuckle 生成的 Swagger 架构中排除某些模型

    我正在使用 Swashbuckle 为我的 ASP Net Core 3 1 OData 项目生成 Swagger 文档 控制器方法的生成是完美的 它基于模型正确生成模式 除了一件事 对于架构中的每个模型 它还会生成一个额外的 ModelN
  • 使用 Java 从二进制文件中读取整数值

    我正在尝试使用写入大于 256 的值DataOupPutStream write 方法 当我尝试使用读取相同的值时DataInputStream read 它将返回 0 所以 我用了DataOutputStream writeInt and
  • ASP.NET Core 的构建错误 - “...当前设置,将使用版本 2.1.0-preview3-26411-06”

    我使用创建了一个示例项目dotnet 但是在构建项目时出现以下错误 错误 项目已使用 Microsoft NETCore App 版本 2 1 0 rc1 恢复 但根据当前设置 将使用版本 2 1 0 preview3 26411 06 要
  • 本地化数据库字段中的邮政/实际地址显示

    谁能向我指出国际邮政 住宅 送货地址格式模板的列表 这些模板使用某种可解析的标准词汇作为地址部分 理想的列表包含一个国家 地区代码 然后是使用可替换标记的格式 以便我可以将数据库地址字段替换到模板中以生成可本地格式打印的内容 例如 NZ f
  • 如何将数据存储到android中的Secure Element中

    我想在 Android 中创建一个类似谷歌钱包的应用程序 据说 所有支付凭证都存储在一个名为安全元件包含在手机中 我如何访问它安全元件并将我的卡凭证存储到其中 我的目标是在收银台使用我的手机 Nexus 而不是我的卡 所以我想要的是将一些数
  • 更新和替换字符串的一部分

    我有一个有两列的表格 ID and Value 我想更改第二列中一些字符串的一部分 表格示例 ID Value 1 c temp 123 abc 111 2 c temp 123 abc 222 3 c temp 123 abc 333 4
  • 执行ContentResolver插入时出错

    执行插入新数据到内容提供程序时出错 请参见下面的代码 PS 我只是将下面的代码直接放入 Activity 的 onCreate 中 然后执行 ContentValues values new ContentValues values put
  • 谁定义了正则表达式?

    W3C 定义了 HTML 标准 CSS 标准和一些其他标准 我知道还有其他团体也定义了标准 谁定义了正则表达式的语法 正则表达式由多个标准机构涵盖 包括 IEEE 标准 1003 1 所谓的 Posix http pubs opengrou
  • 将 UTC 日期转换为日期时间字符串 Titanium

    我有一个日期字符串 2012 11 14T06 57 36 0000 我想转换为以下格式 2012 年 11 月 14 日 12 27 我尝试了很多解决方案 包括将 UTC 日期转换为日期时间字符串 Javascript https sta
  • 将随机排列代码从 MATLAB 移植到 Python

    如何将这段 MATLAB 代码转换为 Python 例如 对于随机文件 FileA rand 10 2 FileB randperm 10 for i 1 10 fileC FileB i 1 FileA i 1 for the x fil
  • PyQt QMediaPlayer setPosition 对位置值进行四舍五入

    我有一个应用程序 旨在帮助同步实验视频和数据信号 该应用程序有一个视频小部件和一个滑块 可以设置视频的时间位置 然而 QMediaPlayer 只会以 500 毫秒 1000 毫秒的间隔设置位置 在我的应用程序中为 500 毫秒 在设计的应
  • Javascript 和 PHP 中十进制转 RGB

    我正在尝试将十进制值转换回 RGB 值 假设这是编译十进制值的公式 c r 255 255 g 255 b 例如 rgb 16 120 78 加起来是 1071078 如何在没有任何 溢出 的情况下求解 r g 和 b 提前致谢 使用除法
  • 我的 NDK 项目因 CPU 架构相关问题而无法编译

    有人可以解释一下为什么我会收到此错误吗 Build command failed Error while executing process C Users Kevin Desktop Android Sdk ndk bundle ndk
  • Dalvik的内存模型和Java的一样吗?

    Dalvik的内存模型和Java s http java sun com docs books jls third edition html memory html 17 4 我特别感兴趣的是是否读写参考和非long non double原
  • 在CALayer中添加UIImage

    我必须添加 UIImageView 作为 MapView 的子视图 为此 我在 MapView 上方创建了一个图层 在这一层中 我想放置我的图像 但我得到一个白色矩形 没有其他东西 我的图像不可见 这是代码 void viewDidLoad