如果初始帧是 CGRectZero,则自定义 UIView 的 drawRect 永远不会被调用

2024-02-14

我有一个非常简单的 UIView 自定义子类:

#import "BarView.h"
#import <QuartzCore/QuartzCore.h>

@implementation BarView

@synthesize barColor;

- (void)drawRect:(CGRect)rect
{
    NSLog(@"drawRect");
    // Draw a rectangle.
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, self.barColor.CGColor);
    CGContextBeginPath(context);
    CGContextAddRect(context, self.bounds);
    CGContextFillPath(context);
}

- (void)dealloc
{
    self.barColor = nil;

    [super dealloc];
}

@end

如果我用一些非零矩形在此类上调用 initWithFrame:rect ,它就可以正常工作;但是当我调用 initWithFrame:CGRectZero 时,即使在我将视图的框架修改为非零矩形之后,也永远不会调用drawRect。

我当然理解为什么零帧的视图永远不会调用它的drawRect:,但是为什么即使在帧更改之后它也不会被调用?


快速浏览一下苹果文档就知道了这一点

更改框架矩形会自动重新显示视图,而无需调用其drawRect:方法。如果您希望 UIKit 在框架矩形发生变化时调用 drawRect: 方法,请将 contentMode 属性设置为 UIViewContentModeRedraw。

这是在框架属性的文档中:
https://developer.apple.com/documentation/uikit/uiview/1622621-frame?language=objc https://developer.apple.com/documentation/uikit/uiview/1622621-frame?language=objc

如果您希望视图重绘,只需调用 setNeedsDisplay 就可以了(或者,正如文档所说,您可以将其设置为 UIViewContentModeRedraw,但这取决于您)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果初始帧是 CGRectZero,则自定义 UIView 的 drawRect 永远不会被调用 的相关文章

随机推荐

  • 在 Yii2 中一次保存多个模型

    我有两个模型 Users and Students 我想同时将数据插入到这些表中 首先 我将数据保存到Students模型 然后进入Users楷模 现在 如果数据没有成功插入到Users模型已经有一个条目Students桌子 我想要的是仅当
  • Akka Actor 带有 TimeoutException 的“询问”和“等待”

    我正在使用 Scala 和 Akka 建模一个简单的 P2P class Node extends Peer with Actor var peers List ActorRef List def receive case register
  • iOS13 getUserMedia 不适用于 Chrome 和 Edge

    我和我的朋友正在构建一个需要相机访问权限的应用程序 但我们在让相机与 iOS 配合使用时遇到了一些问题 我们使用的是 iOS13 Safari 在获取相机内容后立即冻结 chrome 和 Edge 根本无法获取相机访问权限 我们的代码如下
  • Asp.Net MVC 中 DataAnnotations StringLength 文本框的 maxlength 属性

    我正在开发 MVC2 应用程序 想要设置文本输入的 maxlength 属性 我已经使用数据注释在模型对象上定义了 stringlength 属性 并且它正在正确验证输入字符串的长度 当模型已有信息时 我不想通过手动设置最大长度属性来在视图
  • 启动 Firefox、使用特权 nsI* API 驱动第 3 方网站的最简单方法

    启动 Firefox 最简单的方法是什么 加载第 3 方网站 我是授权的 自动化 并针对该站点运行一些 特权 API 例如 nsIProgressListener nsIWindowMediator 等 我尝试了两种方法 使用 XULrun
  • Next.js - 从节点模块的“dist”文件夹提供静态 JS 的最佳方式

    我正在使用一个使用 Tesseract OCR 从图像中读取文本的应用程序 我想从 node modules tesseract js dist 获取一些 JS 文件 并使它们可以在浏览器中下载 我知道我可以将文件复制到 public ne
  • Pandas 绘制重复的数据框

    我正在尝试绘制包含 2 列的 pandas 数据框 如下所示 For i in data1 for j in data2 traces append go Scatter x df A y df B plot A 列有重复值 当我绘制它们时
  • Grails 急切获取不会检索所有数据

    我有域类 class Person static hasMany items Item static fetchMode items eager String name Set items class Item static belongs
  • 全屏背景上的android xml可绘制图像

    我需要在 android 中使用 xml 可绘制对象 用于 cordova 启动屏幕 我想在屏幕中央显示一个透明徽标 不拉伸 而屏幕的其余部分则设置背景颜色 我首先尝试的是仅在 xml 文件中添加图像
  • 使用堆栈时无法导入 System.Directory

    我有点困惑为什么这不起作用 我有一个导入 System Directory 的小程序 当我在命令行上使用 runhaskell 运行它时 它会编译并输出我期望的内容 当我使用与堆栈相同的程序时 我收到一条消息说 无法加载 System Di
  • 使用specs2 + scalalogging 进行单元测试记录器消息

    我这里有一个小问题 真的不知道如何实现记录器消息的单元测试 当然 这听起来有点奇怪 但对我来说这是一个非常有趣的话题 但让我说得更具体一些 我有一些 scala 类和测试规范 class Testable extends Logging d
  • JavaScript 中的 MAC 地址

    我知道我们可以通过 IE ActiveX 对象 获取用户的 MAC 地址 有没有办法使用JavaScript获取用户的MAC地址 我同意之前的所有答案 如果您能够直接从 Javascript 执行此操作 这将是一个隐私 安全漏洞 我能想到的
  • MSIE 10、网页字体和字体功能设置导致文本不可见

    我认为这确实是 Microsoft Internet Explorer 10 中的一个错误 但我在任何地方都找不到该问题的任何解释 问题的现场演示可以在以下位置找到http jsfiddle net 37Bu5 http jsfiddle
  • SBT测试中出现奇怪的异常

    我面临 SBT 版本 0 13 9 的问题 我的 ScalaTest 测试之一失败 不确定性EOFException 堆栈跟踪 Exception in thread Thread 155 Exception in thread Threa
  • 两个同名字段

    我有一个 ViewModel 类来封装 个人 和 业务 模型 我的问题是 两个模型都有一个名为 电子邮件 的属性 并且模型绑定无法区分两者 我读到了 Bind Prefix 用于解决此问题 但我还没有看到有关如何实现此目的的简洁示例 pub
  • 在另一列之后添加列

    如何使用 Alembic 或 SQLAlchemy 将一列又一列添加到数据库中 那相当于这个 SQL 子句 https stackoverflow com a 2934335 2100933 ALTER TABLE foo CHANGE C
  • 自动测试问题

    我刚刚安装了 Zentest 4 4 6 其中包括自动测试 4 4 6 当我运行自动测试时 出现以下错误 gems ZenTest 4 6 0 lib autotest rb 226 in autodiscover undefined me
  • 科尔多瓦建造|运行失败 -compileDebugJavaWithJavac

    我在构建我的项目时遇到问题安卓平台 on 阿帕奇科尔多瓦 版本号 Android 5 0 1 三星 Galaxy S4 Cordova 6 1 1 于 2016 年 7 月 4 日从 5 1 1 更新 离子 1 7 14 Windows 7
  • 如何在MySQL中实现关键字搜索?

    我是 SQL 编程新手 我有一个表作业 其中的字段id position category location salary range description refno 我想实施一个关键词搜索从前端 关键字可以驻留在上表的任何字段中 这是
  • 如果初始帧是 CGRectZero,则自定义 UIView 的 drawRect 永远不会被调用

    我有一个非常简单的 UIView 自定义子类 import BarView h import