首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >比例高度值来自xib文件,而不是设备。

比例高度值来自xib文件,而不是设备。
EN

Stack Overflow用户
提问于 2018-01-11 07:19:13
回答 2查看 575关注 0票数 1

这是我第一次面对这个陌生人的问题。我有一个UIViewController,我用它创建的XIB文件。屏幕有两个视图: viewA和viewB。viewA具有top = 0leading = 0trailing = 0等值。viewA.height = safeArea.height/2。viewB约束是top = 0leading = 0trailing = 0bottom = 0。在viewA中,我有一个名为viewAbackgroundview,它对其容器(viewA)具有top = 0leading = 0trailing = 0bottom = 0约束,并且在viewA中也有一些labels。我使用这个viewAbackground来添加一个gradient,因为如果我直接将它添加到viewA中,它就会出现在标签前面。我是这样添加梯度的:

代码语言:javascript
运行
AI代码解释
复制
func createGradientLayer(theView: UIView) {
    let gradientLayer = CAGradientLayer()
    gradientLayer.frame = theView.frame
    gradientLayer.startPoint = CGPoint(x: 0.5, y: 1.0)
    gradientLayer.endPoint = CGPoint(x: 0.5, y: 0.0)
    gradientLayer.colors = [UIColor(hexString: Colors.startColor)?.cgColor, UIColor(hexString: Colors.endColor)?.cgColor]
    //add the gradient to the view
    theView.layer.addSublayer(gradientLayer)
}

然后在viewDidLoad中我称之为createGradientLayer(theView: viewA)

添加了gradient,但问题是它没有与viewA相同的size。经过几个小时的尝试,我发现应用的size值与我在interface Builder中选择的view as中的值相同,而不是设备屏幕上的值。例如:如果在xib中有view as iPhone SE,那么当我在iPhone 6中运行时,就会得到iPhone SEviewA大小的gradient。我有Xcode 9.2,我正在使用Swift 4

有人能解释我为什么有这么大的尺寸问题吗?

编辑获取更多信息:--这是视图的层次结构。ScrollView <- MainView <- viewA and viewBmainView高度等于safeArea高度。scrollView的实用工具是用于诸如iPhone 4这样的小型设备。在这种情况下,为了获得滚动效果,我给mainView一个定义的高度值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-11 07:53:55

当您的视图从xib或情节提要加载时,布局将与加载的内容匹配。正如您已经注意到的,这并不一定会与运行它的设备相同。

因此,在viewDidLoad中,您将从数据中加载大小。

在第一次调用viewWillAppear时,您会看到相同的大小。

每次视图的边界发生变化时都会调用viewDidLayoutSubviews。这将是第一次像你所期望的那样得到你正在运行的设备的视图。

但是要小心,因为每次调用该方法时,您都不想添加梯度。但是,如果大小可能因设备旋转而发生更改,则可能需要更新它。

更新因为您使用滚动视图,viewDidLayoutSubviews可能无法报告正确的值。可能是SDK中的一个bug。您可以尝试从viewDidAppear中获得正确的值,或者如果太晚了,请尝试下面的解决方案。

代码语言:javascript
运行
AI代码解释
复制
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    scrollView.setNeedsLayout()
    scrollView.layoutIfNeeded()
    createGradientLayer(theView: viewA)
}
票数 0
EN

Stack Overflow用户

发布于 2018-01-11 07:29:27

这个问题与对UIViewController生命周期的误解有关。

在创建类并从xib加载时调用ViewDidLoad。所有视图都有您在xib中设置的大小。

在视图出现之前调用ViewWillAppear。此时,您的所有视图都将具有正确的大小,因此您可以使用它们的大小和位置。

另外,CALayer不支持自动调整大小,因此可能需要在didLayoutSubviews中更新它的大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48210395

复制
相关文章
Android OpenGL ES 纹理
之前我们一直都是在绘制简单的图形与颜色,如果是一张图片该如何通过OpenGL ES进行渲染出来呢?
Rouse
2023/02/14
1.2K0
Android OpenGL ES 纹理
OpenGL ES(三) 纹理
纹理是一种应用到OpenGL绘图场景中三角形上的图像数据,它通过经过过滤纹理单元填充到实心区域。 下面是OpenGL ES载入一个简单纹理的例子 -(void)setupGL{ // 创建设备上下文,用OpenGL ES 2.0的API GLKView *view = (GLKView *)self.view; view.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; // GLKView
用户2215591
2018/06/29
5900
OpenGL ES 绘制纹理
在OpenGL ES中绘制一张图片需要使用到纹理(texture),绘制纹理步骤如下:
老孟Flutter
2020/09/11
1.1K0
OpenGL ES 2.0 (iOS)[06-1]:基础纹理
Texture 在 OpenGL 里面有很多种类,但在 ES 版本中就两种——Texture_2D + Texture_CubeMap;
半纸渊
2018/08/30
2.1K0
OpenGL ES 2.0 (iOS)[06-1]:基础纹理
OpenGL ES _ 着色器_纹理图像
玩过游戏的同学们,都知道在游戏人物身上穿的那个叫皮肤,专业点将那个就叫做纹理图像。GLSL 支持在顶点和片段着色器使用纹理图像。
酷走天涯
2018/09/14
1.3K0
(转载非原创)OpenGL ES 压缩纹理
在实际应用特别是游戏中纹理占用了相当大的包体积,而且GPU无法直接解码目前流行的图片格式,图片必须转换为RGB等类型的格式才能上传到GPU内存,这显然增加了GPU内存的占用。为了处理这些问题于是出现了GPU支持的压缩纹理格式,在GPU中进行解码。压缩纹理属于有损压缩,更在意解码速度,而编码在程序运行之前,因此速度较慢。
xlj
2021/07/07
1.3K0
OpenGL ES 纹理过滤模式-glTexParameteri
Android中GLES20.glTexParameteri函数表示对纹理的设置,函数结构如下:
老孟Flutter
2020/09/11
1.4K0
OpenGL ES实践教程(五)多重纹理实现图像混合
教程 OpenGL ES实践教程1-Demo01-AVPlayer OpenGL ES实践教程2-Demo02-摄像头采集数据和渲染 OpenGL ES实践教程3-Demo03-Mirror OpenGL ES实践教程4-Demo04-VR全景视频播放 其他教程请移步OpenGL ES文集。 有简书的开发者问我如何使用在一张大图上贴一张小图,原始的需求是在检测人脸,在返回的范围(矩形)内贴上一张图片。 有几点前提: 尽量少消耗CPU; 合成的数据是用于推流; 图片大小不一致; 说说如果没有上述几点
落影
2018/04/27
3.4K0
OpenGL ES实践教程(五)多重纹理实现图像混合
opengl入门-纹理
到这一讲稍微复杂点了,做个阶段性的总结,加深记忆 参考:learnOpenG-纹理 opengl工作流理解: opengl实现渲染的套路有一定范式,把握两条主线: ope
公号sumsmile
2020/06/09
9350
NeNe opengl 纹理映射
#include "stdafx.h" #include <windows.h> // Windows的头文件 #include<stdio.h> //#include <gl/glew.h> // 包含最新的gl.h,glu.h库 //#include <gl/glut.h> // 包含OpenGL实用库 #include <gl/glaux.h> // GLaux库的头文件 //#include<gl/GLU.h> #pragma comment(lib, "open
流川疯
2019/01/17
7840
OpenGL 学习系列 --- 纹理
要注意到,OpenGL 绘制的物体是 3D 的,而纹理是 2D 的,那么纹理映射就是将 2D 的纹理映射到 3D 的物体上,可以想象成用一张纸裹着一个物体一样,不过要按照一定规律来。
音视频开发进阶
2019/07/25
1.5K0
OpenGL ES 如何一次性渲染到多个纹理?
OpenGL ES 多目标渲染(MRT),即多重渲染目标,是 OpenGL ES 3.0 新特性,它允许应用程序一次渲染到多个缓冲区。
字节流动
2022/02/09
3.1K0
OpenGL ES 如何一次性渲染到多个纹理?
在Cookie中存储对象
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/46955119
DannyHoo
2018/09/13
3.9K0
OpenGL(八)--纹理相关APIOpenGL(八)--纹理相关API
OpenGL(八)--纹理相关API 1. 原始图像数据 //存储图像数据所占内存大小 size = 图像的高度 * 图像的宽度 * 每个像素所占字节数 像素所占字节数:一般为4Byte,包含RGBA四个通道,每个通道为1Byte(8Bit) 2. 认识函数 像素存储方式 //改变像素存储方式 void glPixelStorei(GLenum pname,GLint param); //恢复像素存储方式 void glPixelStoref(GLenum pname,GLint param); /
用户8893176
2021/08/09
1.3K0
OpenGL(八)--纹理相关APIOpenGL(八)--纹理相关API
OpenGL与OpenGL在移动端的应用
OpenGL首先我们从字面意思来理解:Open Graphics Library,开放的图形库,图形库自然是处理图形的,所以简单来说OpenGL就是用来处理图形的一个三方库。 稍微技术流一点,作如下解释:是用于渲染2D,3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。
清墨
2019/11/15
2.8K0
OpenGL与OpenGL在移动端的应用
纹理分析及其在医学成像中的应用
纹理分析是一种量化图像强度变化的图像分析技术。的基本原理,以及它们的优点、缺点和应用。这项研究的重点是收集和分析近50年来有关纹理分析的研究,简要描述了不同的方法,并给出了应用实例。鉴于纹理分析应用广泛,本研究主要集中在生物医学图像分析领域,并整理了一份最新的生物组织和器官相关的疾病产生的纹理变化的列表,可用于查阅疾病的发病和进展。最后,总结了纹理分析方法作为疾病生物标记物的作用。本文发表在IEEE REVIEWS IN BIOMEDICAL ENGINEERING杂志。
用户1279583
2022/02/28
1.1K0
纹理分析及其在医学成像中的应用
在 Flutter 中创建可拖动的浮动操作按钮[Flutter专题15]
Flutter 允许您使用FloatingActionButton小部件添加浮动操作按钮。但是,它不允许您拖动按钮。如果你想让它可拖动怎么办。本教程有一个示例,说明您需要做什么才能创建浮动操作按钮,只要它位于父小部件内,就可以将其拖动到屏幕周围的任何位置。
徐建国
2021/12/07
5.9K0
在 Flutter 中创建可拖动的浮动操作按钮[Flutter专题15]
在.NET中调用存储过程
因为做项目要用到数据库,因此存储过程是必不可少的,看了一点如何在.NET中调用存储过程的资料,颇有点心得,觉得这个东西是当用到数据库的时候必须要会的一项技术。下面是它的定义:
SAP梦心
2022/05/07
2.3K0
在 macOS 下配置 OpenGL
下载 glad,macOS 据说只支持 3.3,所以我选择了 gl: 3.3 和 Profile: Core。 解压后将 glad 文件夹直接放入 /usr/local/Cellar 文件夹下。
云游君
2021/05/21
6860
点击加载更多

相似问题

在OpenGL ES中将纹理渲染到自身

12

OpenGL (ES)如何存储纹理/顶点

20

OpenGL ES纹理存储器

112

在opengl es 2.0中绘制纹理

38

OpenGL/OpenGL ES更新纹理

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档