首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >CALayer没有在iOS中显示图像

CALayer没有在iOS中显示图像
EN

Stack Overflow用户
提问于 2018-03-23 22:10:48
回答 1查看 123关注 0票数 0

我正在构建一些代码,我希望能够交叉编译。

目标是显示一个图像,拉伸它,以适应整个视图。下面是我调用的函数,在扩展UIView (in iOS)或NSView (in macOS)的类中尝试这样做:

代码语言:javascript
运行
AI代码解释
复制
var viewLayer:CALayer?


 func updateViewer() {
        if let curr = viewLayer {
            curr.removeFromSuperlayer()
        }
        viewLayer = CALayer()
        viewLayer?.frame = Rect(x: 0, y: 0, width: frame.size.width, height: frame.size.height)
        viewLayer?.contentsGravity = kCAGravityResizeAspectFill
        viewLayer?.contents = //A UIImage
        //This may look weird but its a good way to get it to work on UIView and NSView
        if let laya = (layer as Any) as? CALayer {
            laya.frame = Rect(x: 0, y: 0, width: frame.size.width, height: frame.size.height)
            laya.insertSublayer(viewLayer!, at: 0)
        }
    }

这段代码在OSX上工作得很好,但是在iOS中它只是空的,我不知道为什么。

EN

回答 1

Stack Overflow用户

发布于 2018-03-27 18:45:18

CABasicAnimation.中,我通过使用iOS实现了您想要做的事情您可以在下面看到我的自定义UIView类实现:

代码语言:javascript
运行
AI代码解释
复制
class MyCustomView: UIView {
   var viewLayer:CALayer?

   override init(frame: CGRect) {
      super.init(frame: frame)

      updateViewer()
   }

   required init?(coder aDecoder: NSCoder) {
      fatalError("init(coder:) has not been implemented")
   }

   func updateViewer() {

      if let curr = viewLayer {
        curr.removeFromSuperlayer()
      }
      viewLayer = CALayer()
      viewLayer?.frame = self.bounds
      viewLayer?.contentsGravity = kCAGravityResize // you were using kCAGravityResizeAspectFill
      viewLayer?.contents = UIImage(named: "bg-3.png")?.cgImage
      layer.addSublayer(viewLayer!)

      let basic = CABasicAnimation(keyPath: "transform")
      basic.fromValue = NSValue(caTransform3D: CATransform3DMakeScale(0.1, 0.1, 0.1))
      basic.toValue = NSValue(caTransform3D: CATransform3DMakeScale(1.0, 1.0, 0.1))
      basic.duration = 2.0
      viewLayer?.add(basic, forKey: "transform")
    }
}

我已经在OSX应用程序中测试了这段代码。您的交叉兼容性概念是通过使用此自定义视图获得的。下面是我的OSX自定义视图代码:

代码语言:javascript
运行
AI代码解释
复制
class MyCustomView: NSView {
var viewLayer:CALayer?

override init(frame: CGRect) {
    super.init(frame: frame)
    self.wantsLayer = true
    updateViewer()
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func updateViewer() {

    if let curr = viewLayer {
        curr.removeFromSuperlayer()
    }
    viewLayer = CALayer()
    viewLayer?.frame = self.bounds
    viewLayer?.contentsGravity = kCAGravityResize
    viewLayer?.contents = NSImage(imageLiteralResourceName: "bg-3.png")
    layer?.addSublayer(viewLayer!)

    let basic = CABasicAnimation(keyPath: "transform")
    basic.fromValue = NSValue(caTransform3D: CATransform3DMakeScale(0.1, 0.1, 0.1))
    basic.toValue = NSValue(caTransform3D: CATransform3DMakeScale(1.0, 1.0, 0.1))
    basic.duration = 2.0
    viewLayer?.add(basic, forKey: "transform")
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49461831

复制
相关文章
iOS CALayer 简单介绍
总结:能看到的都是uiview,uiview能显示在屏幕上是因为它内部的一个层calyer层。
用户1219438
2018/08/06
6620
iOS CALayer 简单介绍
iOS 页面渲染 - UIView & CALayer
今天我们来聊一聊 UIView 与 CALayer 的相关知识以及它们之间的关系,其实这部分内容要是引申出来会比较多,今天我们先收敛一下,先讲一些基本的东西,后面还会有系列文章对其进行扩展。关于iOS的UI渲染部分,还是建议大家看看Apple的官方文档核心动画编程指南[1]以及WWDC2011的sessionUnderstanding UIKit Rendering[2]。
CoderStar
2022/08/24
1.9K2
iOS 页面渲染 - UIView & CALayer
iOS动画-CALayer基础知识
核心动画Core Animation,其实是由Layer Kit这样一个名字演变而来。它实际上是一个复合引擎,可以将存储在图层树体系中的不同独立图层,尽可能快地组合成不同的可视内容呈现于屏幕上;所以做动画只是Core Animation的特性之一;
梧雨北辰
2019/04/22
1.9K0
iOS动画-CALayer基础知识
iOS-核心动画详解之CALayer
1. CALayer的基本操作. 1. CALayer简介: CALayer我们又称为层,在每个UIView内部都有一个layer的属性,UIView之所以能够显示,就是因为它里面有layer层,才具有显示的功能,我们通过操作CALayer对象,可以很方便地调整UIView的一些外观属性,例如可以给UIView设置阴影,圆角,边框等等... 2. 操作layer改变UIView外观. 2.1 设置阴影 //默认图层是有阴影的, 只不过是透明的。1为不透明,0为透明 _RedView.layer.sha
xx_Cc
2018/05/10
2K0
iOS动画-CALayer布局属性详解
本篇主要内容: 1.Frame与Bounds的区别 2.中心点(position)与锚点(anchorPoint) 3.视图与图层的坐标系
梧雨北辰
2019/04/23
2.3K0
iOS动画-CALayer布局属性详解
iOS开发之UIView与CALayer的异同
看了iOS6编程实践第9章后,总结一下UIView和CALayer的异同点: UIView 负责绘制与事件处理,而CALayer只负责绘制。 UIView的绘制也是交给CALayer的。 UIView和CALayer都可以有下一层,都是树状结构。 自定义的UIView重写drawRect,自定义的CALayer重写drawInContext或重写委托者的drawLayer方法。 drawRect方法中系统已经设置好上下文,而且背景颜色等也已经设置好,而drawLayer方法中需要自己push context
forrestlin
2018/05/24
3940
iOS动画-CALayer隐式动画原理与特性
Core Animation的一个非常显著的特性是就是实现动画,而且它支持隐式动画和显式动画两种形式,本篇我们主要从隐式动画说起;
梧雨北辰
2019/04/25
4.7K0
iOS动画-CALayer隐式动画原理与特性
iOS面试题:UIWindow,UIView,CALayer的区别
继承自UIView,是一种特殊的 UIView,通常在一个app中只会有一个keyUIWindow。
猿_人类
2019/07/01
8260
iOS面试题:UIWindow,UIView,CALayer的区别
CALayer
Layers 通常被用于去提供views的后备存储. A layer’s 的主要工作是管理您提供的视觉内容,但layer’s本身视觉属性可以设置,如背景颜色,边境,和阴影。除了管理视觉内容,该层还维护其内容的几何信息(比如它的位置、大小和变换),用于在屏幕上显示这些内容。修改layer的属性决定着你怎么样在layer几何内容上启动动画。对象封装一层一层的持续时间和节奏及其动画采用CAMediaTiming协议,它定义了层的计时信息。
星宇大前端
2022/06/02
3250
iOS 页面渲染 - 流程
作为一名专业的 iOS 页面仔,画 UI 是我们的家常便饭,那不知道你在开发过程中有没有思考过这样一些问题:
CoderStar
2022/09/23
1.9K1
iOS 页面渲染 - 流程
iOS 渲染原理解析
对于现代计算机系统,简单来说可以大概视作三层架构:硬件、操作系统与进程。对于移动端来说,进程就是 app,而 CPU 与 GPU 是硬件层面的重要组成部分。CPU 与 GPU 提供了计算能力,通过操作系统被 app 调用。
会写bug的程序员
2020/06/03
2.2K0
iOS 渲染原理解析
IOS渲染流程之提交图层数据至RenderThread进程
UIView/CALayer---->CoreAnimation./Core Graphics/Core Image---->GPU Drive-->GPU
小柔
2022/10/09
5050
IOS渲染流程之提交图层数据至RenderThread进程
在DataGrid中显示图片
    DadaGrid 是 ASP.NET 编程中一个很重要的控件,其优良的可定制功能为提高它的表现力提供了极大的方便。除了与数据源直接绑定以外,我们还可以通过列绑定模板对 DataGrid 的列进行自定义,来按照我们设定的格式显示数据。
Java架构师必看
2021/03/22
3.5K0
iOS开发CoreAnimation解读之二——对CALayer的分析
        每一个UIView的对象中都有一个layer这样的属性,并且layer会负责view中有关图形绘制的相关操作,例如我们设置view的背景颜色和设置layer的背景颜色都是有效的,并且,设置view的背景色依然是通过layer来展示的,我们可以写如下的测试代码:
珲少
2018/08/16
1.1K0
iOS开发CoreAnimation解读之二——对CALayer的分析
在eclipse中没有server(需在选项中设置)
①在软件eclipse下的Help->InstallNew Software->中,在Work with中点击Add,如下,加入
全栈程序员站长
2022/07/25
4.1K0
在eclipse中没有server(需在选项中设置)
《Motion Design for iOS》(十六)
Core Animation是一个动画和图形合成框架,用于提高速度和效率。虽然在名字中有动画的单词,不要让它误导你以为它只能做这个;它实际上负责屏幕上显示的所有视图的整体渲染体系结构,可以非常快速地进行透明度计算、图像过滤和视觉效果。它是为iOS创造的,但从OS X10.5开始,也可以在Mac上应用。
Cloudox
2021/11/23
2810
《Motion Design for iOS》(十六)
CALayer的寄宿图
一个视图就是在屏幕上显示的一个矩阵块(比如图片、文字或者视频),它能够拦截点击以及触摸手势等用户输入。视图在层级关系中可以相互嵌套,一个视图可以管理他的所有所有子视图的位置。
拉维
2019/08/12
1.1K0
CALayer的寄宿图
OpenCV中图像的读取,显示与保存
相关函数:cv2.imread()、cv2.imshow()、cv2.imwrite()
py3study
2020/01/19
3K0
opencv显示图像
如果说我们在些项目的过程中会频繁的查看我们的图片,我们就可以直接给它封装一个方法:
淼学派对
2023/10/14
2400
opencv显示图像
点击加载更多

相似问题

CALayer没有显示iOS8

11

如何在CALayer上在iOS上显示彩色图像?

42

UIBezierPaths没有在CALayer drawLayer inContext中显示

35

在CALayer上使用自定义CALayer显示对CALayer没有任何更改

21

ios使子视图显示在CALayer之上

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文