UIView 子类绘制背景,尽管完全是空的drawRect: - 为什么?

2024-04-12

因此,我有一个自定义 UIView 子类,它可以绘制圆角边缘。东西绘制得很完美,但是背景总是填充整个边界,尽管首先剪切到路径。边框也画出来了above矩形背景,尽管我在绘制矩形中绘制了边框:在背景之前。所以我删除了drawRect:的全部内容,它现在实际上是空的——尽管如此,背景还是被绘制了!

有人对此做出解释吗?我在 Interface Builder 中设置了背景颜色。谢谢!


抱歉这个独白。 :)

问题是 UIView 的图层显然绘制了背景,它独立于drawRect:。这就是为什么你不能通过覆盖来摆脱背景drawRect:.

您可以覆盖- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx并让图层绘制任何你想要的,或者你覆盖- (void) setBackgroundColor:(UIColor *)newColor并且不分配newColor to 背景颜色,但是到你自己的伊瓦尔,比如我的背景颜色。然后您可以使用我的背景颜色在绘制矩形中;随心所欲地绘制背景。


压倒一切setBackgroundColor:

定义一个实例变量来保存背景颜色,例如我的背景颜色。在你的 init 方法中,将真实的背景颜色设置为clearColor:

- (id) initWithCoder:(NSCoder *)aDecoder
{
    if ((self = [super init...])) {
        [super setBackgroundColor:[UIColor clearColor]];
    }
    return self;
}

覆盖:

- (void) setBackgroundColor:(UIColor *)newColor
{
    if (newColor != myBackgroundColor) {
        [myBackgroundColor release];
        myBackgroundColor = [newColor retain];
    }
}

然后使用我的背景颜色在你的drawRect:方法中。这样您就可以在代码中使用 Interface Builder(或 Xcode4)分配的颜色。

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

UIView 子类绘制背景,尽管完全是空的drawRect: - 为什么? 的相关文章

  • 在不同的捆绑包上测试 iPhone 应用内购买?

    我们有一组 iPhone 应用程序的 Beta 测试人员 最近 我们在应用程序中添加了应用内购买功能 在此之前 我们会使用单独的捆绑 ID 和名称向 Beta 测试人员发送临时版本 以便他们可以在手机上拥有商店版本和临时版本 然而 似乎我们
  • 获取对 iOS 应用程序中最顶层视图/窗口的引用

    我正在创建一个可重用的框架 用于在 iOS 应用程序中显示通知 我希望将通知视图添加到应用程序中其他所有内容的顶部 有点像 UIAlertView 当我初始化监听 NSNotification 事件并添加视图作为响应的管理器时 我需要获取对
  • Objective-C中如何使继承的类能够看到父类的隐藏方法[重复]

    这个问题在这里已经有答案了 我有两个类 Class1 和 Class2 第二个类继承自第一个类 我需要重写 Class1 的 update 方法来实现我的目标 继承方法中 update方法的改变是在代码中间进行的 所以我不能使用 超级更新
  • 为什么使用[ClassName alloc]而不是[[self class] alloc]?

    我正在读马克 达尔林普尔 Mark Dalrymple 的著作在 Mac 上学习 Objective C 仅在协议章节 所以仍然相对较新 并试图弄清楚一些事情 为什么要通过类自己的名称来引用它 如果我有一个叫做Foo 为什么我会想写 比如说
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 使用 Cocoa 获取无法安装的驱动器列表

    我想获取在 OS X 下使用 Cocoa Objective C 无法安装 弹出的驱动器列表 我希望 NSWorkspace getFileSystemInfoForPath 能帮助我 NSArray listOfMedia NSWorks
  • 您将如何实现一个检测水平滑动以允许分页的 UITableView?

    我想实现一个 UITableView 一次显示 20 行 但考虑到我实际上可能要展示 120 个项目 我想使用某种分页来处理这个问题 使用前 20 项填充表 当用户从右向左滑动时 用接下来的 20 个项目重新加载 UITableView 从
  • 我可以知道 requireGestureRecognizerToFail 到底会做什么吗?

    谁能告诉我下面的代码行到底会做什么 我已经提到过Apples https developer apple com library ios documentation uikit reference UIGestureRecognizer C
  • 我什么时候应该对 IBOutlet 使用弱或强限定符? [复制]

    这个问题在这里已经有答案了 可能的重复 ARC 下 IBOutlets 应该强还是弱 https stackoverflow com questions 7678469 should iboutlets be strong or weak
  • 我应该在哪个方法中设置 UITextField 的委托?

    在 viewDidLoad 或 init 方法中设置 UITextField 的委托是一个好习惯吗 我尝试在 init 方法中将委托设置为 self 但它没有调用相应的委托方法 当我将代码移动到 viewDidLoad 中时 它注册为将 s
  • UITabBarController 未选择的图标图像色调

    我有一个 UITabBarController 我正在尝试修改 现在 未选择的选项卡图标图像默认为灰色 我知道您无法以编程方式更改这些未选择的图标图像的色调 苹果表示 色调是由 png 文件本身的实际色调控制的 因此 如果您想要白色或绿色图
  • 设置 TableView setEditing 时无法选择 UITableViewCell

    我希望能够选择多行 如下所示的默认邮件应用程序 我有一个名为编辑的按钮 可以调用 self myTableView setEditing YES animated YES 编辑按钮成功显示单元格左侧的圆圈 如上所示的邮件应用程序 但是 当我
  • 如何消除禁用的 UIButton 的灰色外观

    我有一个 UIButton 我希望它处于禁用状态时与处于正常状态时看起来完全相同 现在它看起来有点灰色 不要使用enabled属性或setEnabled NO方法 而是使用 myButton setUserInteractionEnable
  • 在 cocoa touch 中以编程方式将视图位置设置为右上角

    我需要确保一个视图 A 尺寸 200x200 始终与第二个视图 B 全屏尺寸 内的右上角对齐 我想确保无论设备方向如何 视图 A 都保留在该位置 事实是 当使用界面生成器来定位视图时 我对此没有任何问题 但我需要以编程方式构建它 我想我应该
  • 如何在 Swift 中调用 Objective-C 实例类型方法?

    我有一个 Objective C 类 如下所示 interface CustomObjectHavingData NSObject property nonatomic strong NSData objWithData instancet
  • 使用 Objective-C 进行 Windows 开发

    最近读了一篇关于 Objective C 的文章 我觉得它是一门相当简洁的语言 具有很多很酷的功能 我无意进行任何 iPhone 开发 但是我了解 GCC 能够编译 Objective C 代码 所以我想知道 Objective C 是 W
  • 如何在 xcode 中使用相同的 nib 文件创建多个窗口

    我有一个使用表格视图作为界面的 iPhone 应用程序 每次用户点击其中一个表格单元格时 我想向用户显示另一个窗口 然而 我推入导航控制器的窗口的用户界面非常相似 因此 我决定制作一个 通用 nib 文件 以便在该通用 nib 文件的文件所
  • 使用 Objective C 将 RGB 彩色图像更改为灰度图像

    我正在开发一个将彩色图像更改为灰度图像的应用程序 然而 有些图片显示出来是错误的 我不知道代码有什么问题 也许我输入的参数有误 请帮忙 UIImage c UIImage imageNamed downRed png CGImageRef
  • 如何连续关闭 2 个模态视图控制器?

    我有 2 个以模态方式呈现的视图控制器 A presents B which presents C 当我解雇C时 我也想解雇B 但我不知道该怎么做 解雇C self dismissModalViewControllerAnimated YE
  • Dropbox API - 使用 Dropbox 作为服务器

    我想使用文件共享服务器来使某些文件在多台计算机上的应用程序的多个实例中保持最新和恒定 例如 例如 编写多人游戏 它将所有玩家的位置存储在文本文件中 并使用 Dropbox 之类的工具在所有应用程序中保持文本文件不变 每个应用程序实例都可以根

随机推荐

  • 如何使用 .htaccess 文件阻止 IP 地址范围

    我检测到一系列 IP 地址可能被恶意使用 但我不知道如何阻止它 我想使用 htaccess 文件阻止 66 249 74 范围访问我的网站 你可以使用 Order Allow Deny Deny from 66 249 74 0 24 Al
  • iOS 9 中 UITextView 根据内容的高度是错误的

    我通过编程方式动态地将视图添加到带有布局约束的滚动视图中 对于文本视图组件 我想根据文本视图中设置的文本设置高度约束 所以我创建了扩展 UITextView 的类 在文本视图类中 我编写了以下代码来添加高度约束 import CETextV
  • Matplotlib:更改各个网格线的颜色

    我现在只使用 Python 大约一个月 所以如果有一些我忽略的简单解决方案 我很抱歉 基本上我有一个包含 4 个子图的图 左边的 2 个显示纵向图 右边的显示纵向图某些点的散点图 您可以使用按钮单击纵向图不同点的散点图 当前所在纵向图的刻度
  • 无法在 Windows 10 中完全删除 Cygwin

    我无法删除 Windows 10 设置中的 Cygwin 我缩小了范围 导致问题的文件是C cygwin usr share avogadro crystals zeolites CON cif 就我而言 为什么无法删除cywin目录 文件
  • NextJS Zustand 持久状态

    我有这个 github 仓库 https github com salmanfazal01 next firebase starter https github com salmanfazal01 next firebase starter
  • 如何将我当前位置的地图绘制到特定的纬度经度值

    我使用 android 创建 Google 地图 我获取当前位置的纬度经度值并使用其他一些纬度经度值 现在如何在 2 个位置绘制最短路径线 我的主要 Activity java public class MainActivity exten
  • 如何防止此查询两次打印相同的结果?

    我设法创建了一个适合我需要的查询 但现在我遇到了问题 鉴于当前显示结果的方式 查询将每个结果重复两次 我怎样才能让它在显示一次的地方正常工作 Code sql SELECT DISTINCT contacts contact id user
  • 检查定期 ScheduledFuture 是否正在运行

    我有一个通过 Spring 安排的定期任务TaskScheduler schedule Runnable Trigger 鉴于返回的ScheduledFuture 有什么方法可以检查任务当前是否正在运行 经过一番测试后 public sta
  • 在 ARM 处理器上执行存储在外部 SPI 闪存中的程序

    我有一个 ARM 处理器 能够与外部闪存芯片连接 写入芯片的是为 ARM 架构编译的程序 可供执行 我需要知道如何将这些数据从外部闪存获取到 ARM 处理器上以供执行 我可以提前运行某种复制例程 将数据复制到可执行内存空间吗 我想我可以 但
  • 即使在开始时已经输入,Ansible 同步也会提示密码

    Ansible v1 6 5 的同步模块提示输入密码 Enter passphrase for key 尽管我一开始就已经输入了运行剧本 知道为什么吗 我使用以下选项运行我的剧本 u myuser ask sudo pass private
  • 为什么资源文件生成的类位于具有不同名称的文件中?

    我有一个资源文件strings resx 生成的资源类在strings1 designer cs中 为什么会这样呢 问题具体在于 1 该文件内的类名是 strings 正如它应该的那样 请注意 我确实尝试删除 Designer cs 并通过
  • 数组按第一个值排序

    这是我当前的数组 Array 0 gt 10 13 1 gt 11 15 2 gt 12 7 3 gt 1 0 4 gt 2 0 5 gt 3 0 6 gt 4 0 7 gt 5 0 8 gt 6 0 9 gt 7 0 10 gt 8 0
  • 将回车符 (\r) 转换为实际覆盖

    问题 有没有办法将回车符转换为字符串中的实际覆盖 以便000000000000 r1010变换为101000000000 Context 1 初步目标 有号码x 0到255之间 在基数10中 我想将这个数字转换为基数2 添加尾随零以获得12
  • 如何选择在我的 Cocoa 应用程序中使用的网络接口

    我正在尝试在不同的网络上运行测试 我可以在两个 WiFi 连接之间切换 但我需要知道如何在连接了以太网电缆的 WiFi 上运行测试 所以基本上 我需要运行 ping 测试来检查机器上的所有网络是否正常工作 连接以太网端口后 它始终在以太网上
  • Maven:java.lang.NoClassDefFoundError:com/google/inject/internal/cglib/core/$CodeGenerationException

    每当我尝试构建任何 Maven 项目或生成一些原型时 我都会收到此错误 ERROR Error executing Maven ERROR java lang NoClassDefFoundError com google inject i
  • 动态注册本地Vue.js组件

    我们知道possible http v1 vuejs org guide components html Registration动态注册全局 Vue js 版本 1 组件 如下所示 Vue component my component M
  • SAS 宏日期问题

    我对 SAS 完全陌生 我的数据库包含 2000 2011 年的数据 我的数据集列表对于每个数据集都是这样的date TP 2004012 for 26JAN2004 TP 20040127 for 27JAN2004 TP 2004012
  • 在 PowerShell 中调用通用静态方法

    如何在 Powershell 中调用自定义类的通用静态方法 给定以下课程 public class Sample public static string MyMethod
  • 联合初始化

    我正在尝试全局初始化一个联合 如下例所示 include
  • UIView 子类绘制背景,尽管完全是空的drawRect: - 为什么?

    因此 我有一个自定义 UIView 子类 它可以绘制圆角边缘 东西绘制得很完美 但是背景总是填充整个边界 尽管首先剪切到路径 边框也画出来了above矩形背景 尽管我在绘制矩形中绘制了边框 在背景之前 所以我删除了drawRect 的全部内