• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 跨多个 UIView 子类的单个 drawRect 实现

[复制链接]
菜鸟教程小白 发表于 2022-12-12 16:27:02 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

在我的应用程序中,我有几个不同的 UIView 子类:UIDatePicker、UIPicker、UIButton、UITableView、UITableViewCell、UITextView 等...对于其中的每一个,我想添加一个非常简单的 drawRect 自定义实现,我工作得很好。

有没有一种简单的方法可以让 UIView 的多个子类都具有相同的 drawRect 实现,而无需创建子类并在每个 UIPicker、UIButton 等之间重复相同的代码......?

我意识到解决这个问题的方法可能是为 UIView 的 layer 属性编写一个委托(delegate)类并在 drawLayer 中进行自定义绘图,但我想在重新编写代码之前我会问一下。



Best Answer-推荐答案


答案似乎是否定的。

此外,我对解决方法的想法似乎也行不通:我想我可以编写一个不错的小类,从 CALayerDelegate 实现 drawLayer 方法并在其中进行绘图,然后在每个 UIView 或 UIView子类的 init 方法做一个 self.layer.delegate = niceLittleCALayerDelegateClass。

然而,我的研究发生在这件事上:https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CALayer_class/#//apple_ref/occ/instp/CALayer/delegate其中包含该死的句子:在iOS中,如果图层与UIView对象相关联,则必须将此属性设置为拥有该图层的 View 。

所以,双重不。

根据 rmaddy 的建议,我将只为要在其中实现此绘图行为的每个 UIView 子类编写一个子类。我们将看看它是如何进行的。

更新:

我不敢相信我以前没有想到这一点,但是“正确”的方式来做到这一点(也就是说,没有子类化 UIView 的子类并为每个子类的子类添加自定义的 drawRect 方法),从我的一切可以找到,似乎是创建一个 subview 或一个具有透明背景的子层,可以做任何你想要的自定义绘图。

显然,这将在您实际使用的 UIView 之上绘制,因此如果您尝试绘制与 UIView 的默认元素交互的东西,这将变得非常复杂,但出于我的目的(只是一个用 UIBezierPath 绘制的简单框架)它似乎工作得很好。

目前我不确定是 subview 还是子层方法更有效。如果有人能阐明这一点,我将不胜感激。

关于ios - 跨多个 UIView 子类的单个 drawRect 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32876613/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap