gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:57:32 24 4
gpt4 key购买 nike

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

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

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

最佳答案

答案似乎是否定的。

此外,我的解决方法似乎也行不通:我想我可以编写一个很好的小类来实现 CALayerDelegate 的 drawLayer 方法并在那里进行绘图,然后在每个 UIView 或 UIView 中进行绘图子类的初始化方法做一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com