首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

尝试添加子视图时,不会调用drawRect

当尝试添加子视图时,不会调用drawRect方法的原因可能是因为子视图的drawRect方法没有被调用或者没有被正确实现。drawRect方法是用于绘制视图内容的方法,在视图被添加到父视图或者视图需要重新绘制时会被自动调用。

以下是可能导致不调用drawRect方法的一些常见原因:

  1. 子视图的drawRect方法没有被正确重写:子视图需要继承自UIView类,并且重写drawRect方法来实现自定义的绘制逻辑。确保子视图正确重写了drawRect方法,并且在方法内部实现了绘制逻辑。
  2. 子视图的opaque属性被设置为NO:如果子视图的opaque属性被设置为NO,则系统会默认使用透明背景来绘制视图,这可能导致drawRect方法不被调用。确保子视图的opaque属性被设置为YES,或者在drawRect方法中处理透明背景的绘制。
  3. 子视图的contentMode属性不正确:contentMode属性用于指定视图在布局过程中的缩放和对齐方式。如果子视图的contentMode属性设置不正确,可能导致drawRect方法不被调用。确保子视图的contentMode属性设置正确,例如使用UIViewContentModeScaleToFill来填充整个父视图。

如果以上原因都没有解决问题,可以尝试以下方法:

  1. 确保子视图被正确添加到父视图:检查代码中添加子视图的逻辑,确保子视图被正确地添加到父视图上,并且在正确的时机进行添加。
  2. 调用setNeedsDisplay方法:在添加子视图后,可以手动调用父视图的setNeedsDisplay方法来触发视图的重新绘制,这样可以确保drawRect方法被调用。

总结起来,当尝试添加子视图时不会调用drawRect方法的原因可能是子视图的drawRect方法没有被正确实现、子视图的属性设置不正确、子视图没有被正确添加到父视图或者没有触发视图的重新绘制。通过检查以上可能的原因,并进行相应的调整,可以解决这个问题。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【IOS开发基础系列】UIView专题

*)subview 参数 subview     被添加视图视图对象 讨论     被子类重写用来执行额外的命令当视图添加到接收者。...2.在容器视图中设置转换。 3.在容器视图中移除视图。 4.在容器视图添加视图。 5.结束动画块。...4.2.2 (未解决)DrawRect如何清空之前内容 4.2.3 DrawRect之后注意用hitTest:withEvent:方法处理事件接收 //用户触摸第一间加载内容 - (UIView*...如果一个视图的区域超过父视图的bound区域(父视图的clipsToBounds属性为NO,这样超过父视图bound区域的视图内容也会显示),那么正常情况下对子视图在父视图之外区域的触摸操作不会被识别...,因为父视图的pointInside:withEvent:方法会返回NO,这样就不会继续向下遍历视图了。

62030
  • 图层树和寄宿图 -- iOS Core Animation 系列一

    视图在层级关系中可以互相嵌套,一个视图可以管理它的所有视图的位置。 在iOS中,所有的视图都是从UIView这个基类派生出来的。...1.3 平行的层级关系 每个UIView都对应着一个CALayer,视图的职责是创建并管理这个图层,以确保党视图在层级关系中添加或者被移除的时候,他们对应的图层也同样的在对应的层级关系树中有相同的操作...如果UIView检测到-drawRect:被调用,会自动给视图分配一个寄宿图。这个寄宿图的像素尺寸等于视图大小乘以contentsScale。...如果你不需要寄宿图,不要写这个方法,会造成资源浪费,详细部分见《内存恶鬼drawRect视图在屏幕上出现的时候-drawRect:会自动被调用。...在blueLayer上显式调用了-display。因为当图层显示在屏幕上,CALayer不会自动重绘,这和UIView不同。需要手动调用。 我们没有调用masksToBounds。

    1.2K20

    layoutSubviews和drawRect

    LayoutSubviews 子类可以重写此方法,因为需要更精确执行他们视图的布局。...只有当 autoresizing 和基于约束的行为的视图不提供你想要的行为,应重写此方法。 该方法不应直接调用。...如果你想要强制布局更新,下一次绘图更新之前 应当反向调用 setNeedsLayout 方法,如果您想要立即更新您的视图的布局,请调用 layoutIfNeeded 方法。...7.removeFromSuperview PS: init初始化不会触发layoutSubviews drawRect 1、如果在UIView初始化时没有设置rect大小,将直接导致drawRect...4、直接调用setNeedsDisplay,或者setNeedsDisplayInRect PS: 重绘操作在drawRect方法中完成,不建议直接调用drawRect方法,当然调用此方法,结果没有任何效果的

    22210

    layoutSubviews总结

    layoutSubviews在下面情况下会被调用: 1、init初始化不会触发layoutSubviews 可是是用initWithFrame 进行初始化时,当rect的值不为CGRectZero...layoutSubviews, 当我们在某个类的内部调整视图位置,须要调用。 反过来的意思就是说:假设你想要在外部设置subviews的位置,就不要重写。...刷新对象布局 -layoutSubviews方法:这种方法,默认没有做不论什么事情,须要子类进行重写 -setNeedsLayout方法: 标记为须要又一次布局,异步调用layoutIfNeeded...刷新布局,不马上刷新,但layoutSubviews一定会被调用 -layoutIfNeeded方法:假设,有须要刷新的标记,马上调用layoutSubviews进行布局(假设没有标记,不会调用layoutSubviews...) 假设要立即刷新,要先调用[view setNeedsLayout],把标记设为须要布局,然后立即调用[view layoutIfNeeded],实现布局 在视图第一次显示之前,标记总是“须要刷新

    22820

    iOS动画-CALayer基础知识

    ,其内部会自动创建CALayer图层对象(即UIView的关联图层),UIView调用drawRect:方法进行绘图,并且将所有的内容绘制到自己的图层上,绘制完毕后,系统会将图层拷贝到屏幕上,于是就完成了...视图的的职责就是创建并管理这个图层,以确保视图在层级关系中添加或者被移除的时候,它们的关联图层也同样对应在层级关系树当中有相同的操作。...CALayer就会转而尝试调用此的方法; - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx; 在调用方法2之前,CALayer...主动绘制 我们需要显式的调用-display方法;这不同于UIView,当图层显示到屏幕上,CALayer不会自动重绘它的内容,CALayer把重绘的决定权交给了开发者; 2.绘制特点 尽管没有使用...)坐标系下的点或者矩形转换为另一个图层(或视图)坐标系下的点或者矩形;开发过程中我们通常操作的对象都是视图,所以下面以视图为例简单演示其用法:首先创建添加两个宽高都是100*100的橙色、紫色视图在控制器的

    1.9K50

    layoutSubviews 详解

    layoutSubviews在以下情况下会被调用: 1、init初始化不会触发layoutSubviews 但是是用initWithFrame 进行初始化时,当rect的值不为CGRectZero...layoutSubviews, 当我们在某个类的内部调整视图位置,需要调用。 反过来的意思就是说:如果你想要在外部设置subviews的位置,就不要重写。...刷新对象布局 –layoutSubviews方法:这个方法,默认没有做任何事情,需要子类进行重写 -setNeedsLayout方法: 标记为需要重新布局,异步调用layoutIfNeeded刷新布局...,不立即刷新,但layoutSubviews一定会被调用 -layoutIfNeeded方法:如果,有需要刷新的标记,立即调用layoutSubviews进行布局(如果没有标记,不会调用layoutSubviews...) 如果要立即刷新,要先调用[view setNeedsLayout],把标记设为需要布局,然后马上调用[view layoutIfNeeded],实现布局 在视图第一次显示之前,标记总是“需要刷新

    47030

    iOS开发-视图渲染与性能优化

    1、布局(Layout) 调用layoutSubviews方法; 调用addSubview:方法; 会造成CPU和I/O瓶颈; 2、显示(Display) 通过drawRect绘制视图; 绘制...当绘制完成后,视图的像素会被渲染到屏幕上;当下次再次调用视图的-setNeedsDisplay,将会再次调用-drawRect方法。...更新内容,会启用离屏渲染,所以更新代价较大,只能用于静态内容;而且如果光栅化的元素100ms没有被使用将被移除,故而不常用元素的光栅化并不会优化显示。...GroupOpacity=YES, layer 在视觉上的透明度的上限是其父 layer 的opacity。当父视图的layer.opacity != 1.0,会开启离屏渲染。...不要使用不必要的mask,可以预处理图片为圆形;或者添加中间为圆形透明的白色背景视图。即使添加额外的视图,会导致额外的计算;但仍然会快一点,因为相对于切换上下文,GPU更擅长渲染。

    1.7K70

    2018 - iOS 面试题汇总一般面试题BAT面试题

    对于线程来说,runloop是懒加载的,只有当我们使用的时候才会创建,所以在线程用定时器要注意:确保线程的runloop被创建,不然定时器不会回调。...13 介绍下layoutSubview和drawRect layoutSubviews调用情况 init初始化UIView不会触发调用 addSubview会触发调用 改变view的width和...看情况,可能有调用 drawRect调用情况 如果UIView没有设置frame大小,直接导致drawRect不能被自动调用。...drawRect在loadView和viewDidLoad这两个方法之后调用 调用sizeToFit后自动调用drawRect 通过设置contentMode值为UIViewContentModeRedraw...讲 讲你的使 场景以及使 的注意事项 1.给扩展添加属性 2.替换系统方法的的实现 22.讲讲iOS事件响应链的原理 1、响应者链通常是由视图(UIView)构成的; 2、一个视图的下一个响应者是它视图控制器

    6.4K30

    iOS面试题-UI篇

    UIView显示在屏幕上归功于CALayer,通过调用drawRect方法来渲染自身的内容,调节CALayer属性可以调整UIView的外观, UIView继承自UIResponder,比起CALayer...树形结构,也可以向它的layer上添加layer,来完成某些特殊的显示。...loadView用来自定义view,只要实现了这个方法,其他通过xib或storyboard创建的view都不会被加载 看懂控制器view创建的这个图就行 [image] IBOutlet连出来的视图属性为什么可以被设置成...drawRect方法依赖Core Graphics框架来进行自定义的绘制 缺点:它处理touch事件每次按钮被点击后,都会用setNeddsDisplay进行强制重绘;而且不止一次,每次单点事件触发两次执行...当你调用 setNeedsDisplay 方法, UIKit 将会把当前图层标记为dirty,但还是会显示原来的内容,直到下一次的视图渲染周期,才会将标记为 dirty 的图层重新建立Core Graphics

    2K21

    iOS设置视图圆角失效的解决方案

    I iOS设置视图cornerRadius属性失效的解决方案 1.1 解决步骤 1、尝试设置_numberLab.clipsToBounds = YES;2、尝试设置 [self.numberLab layoutIfNeeded...它有什么作用 masksToBounds指在设置layer在超出父layer是否被裁剪,YES表示裁剪,NO表示不裁剪,默认是NO;通常在通过设置layer.cornerRadius属性实现圆角效果要设置...masksToBounds和clipsToBounds是不同的,前者指layer层在超出父layer是否被裁剪(masksToBounds是CALayer的属性),而后者指view在超出父view...表格视图(UITableView)主要用来罗列展示数据项如果数据量很大,那么表格中将需要同样多的cell视图来显示,而cell的大量创建和初始化会造成内存压力,影响界面的流畅性,因此对表格视图的加载优化十分重要...⑤ 尽量手动Drawing视图提升流畅性,而不是直接子类化UITableViewCell,然后覆盖drawRect方法,因为cell中不是只有一个contentview。

    2.3K10

    谈谈对drawRect的理解

    今天,笔者主要整理一下对drawRect方法的理解和使用。 默认情况下,该方法在视图加载过程中不做任何人处理。...当子类使用Core Graphics和UIKit绘制视图内容就需要在该方法中添加绘制的代码。 drawRect简介 drawRect方法在UIView的使用上起着十分关键的作用。...重绘作用:重写该方法以实现自定义的绘制内容 drawRect调用场景 视图第一次显示的时候会调用。...异步调用drawRect,但是绘制视图的动作需要等到下一个绘制周期执行,并非调用该方法立即执行; - (void)setNeedsDisplayInRect:(CGRect)rect;:标记为需要局部重绘...若子类继承自其他View类则需要调用super方法以实现重绘。 若使用UIView绘图,只能在drawRect:方法中获取绘制视图的contextRef。

    1.7K20

    iOS学习——Quartz2D学习之UIKit绘制

    在绘制发生的时候如果使用的是系统提供的视图,绘制工作会自动得到处理。然而,如果是自定义视图,则必须重写drawRect:方法,在此提供相应的绘制代码。...一旦drawRect:方法被调用,就可以使用任何的UIKit、Quartz 2D、OpenGL ES等技术对视图的内容进行绘制了。   ...触发视图重新绘制的动作有如下几种: 当遮挡你的视图的其他视图被移动或删除操作的时候; 将视图的hidden属性声明设置为NO,使其从隐藏状态变为可见; 将视图滚出屏幕,然后再重新回到屏幕上; 显式调用视图的...,不管有没有上下文,只要在View上面画东西,都得要在DrawRect方法中去写 5、如何添加绘制文字属性?   ...drawAsPatternInRect:(CGRect *)rect:在指定的rect区域内平铺图片,如果一张图片不够用,则会在剩下的地方重新放置该图片,图片的大小尺寸不会改变。

    1.5K20

    iOS 页面渲染 - UIView & CALayer

    UIView 的 View 树形结构,它们分别可以有自己的 SubView 和 SubLayer,可以向它的 RootLayer 上添加 layer,来完成一些页面效果,比如说渐变等。...这里说的 view 的 layer 是指 view 的 RootLayer,对于后添加上去的 Layer 还是会有隐式动画的。 页面渲染流程 那么为什么 CALayer 可以呈现可视化内容呢?...} CALayer渲染流程 上图是 CALayer 在渲染之前的流程,我们可以稍微进行归纳一下: 当调用 [UIView setNeedsDisplay] ,实际上会直接调用底层 layer 的同名方法...drawRect: 方法才会被调用到; 如果没有 delegate,会调用 layer 的 drawInContext 方法,也就是我们可以重写的 layer 的该方法,此刻会被调用到; 注意 drawRect...坐标系改了,那么所有视图的位置也会跟着改变。

    1.8K20

    iOS性能优化系列篇之“列表流畅度优化”

    [1240] 从上图可以看出,在滑动过程中CPU占用特点是: * 滑动CPU占用率高、空闲时CPU占用率底 * 主线程CPU占用高、线程CPU占底 根据上述特点我们可以做如下优化: 预加载,...可在线程中进行的任务 * 图片解码 * 文本渲染,UILabel和UITextview都是在主线程渲染的,当显示大量文本,CPU的压力会非常大。...而drawRect使用CPU绘图,相比之下会很慢,而且十分耗CPU \* CAShapeLayer占用内存更少。因为不会创建寄宿图,因此无论多大都不会占用太多内存。...所以,尽量不要让图片和视图的大小超过这个值。 * **视图的混合 (Composing)** 当多个视图(或者说 CALayer)重叠在一起显示,GPU 会首先把他们混合到一起。...为了避免这种情况,可以尝试开启 CALayer.shouldRasterize 属性,但这会把原本离屏渲染的操作转嫁到 CPU 上去。

    2.5K30

    IOS渲染流程之提交图层数据至RenderThread进程

    /Core Graphics/Core Image---->GPU Drive-->GPU 图层树/视图树 一个UIView(视图)对应一个CALayer(图层),CALayer对应显示的数据其有个content...代表Bitamp,渲染流程后的Bitmap被存储在content属性中(这个bitmpa也叫back store)UIView代表视图树对应的CALayer对应图层树 分离UIView和CALayer的目的在于...是为了适配MAC OS系统,MAC OS系统中定义CFImage和NSImage都起作用 2.自己基于顶点来处理数据,手动绘制 顶点的需要自己计算纹理,光照信息用于片段主色器显示颜色 UIView中有一个drawRect...方法用于实现自定义绘制,由Core Graphics处理绘制寄宿图, 实现原理:drawRect是CALayer的方法,CALayer中有一个delegete代理的属性,UIView实现了这个代理的协议...) :添加视图调用layoutSubviews,计算视图布局 注意:减少视图层级,视图创建 Display(绘制视图) Core Grphics进行视图绘制,得到图元信息(对比与Android的canvas

    48610
    领券