1

我最近购买了paintcode。我用它来创建一个滑块。在 Xcode 中,当我在我的故事板中创建一个空视图并将其设置为Slider.m我的滑块代码所在的类并运行此应用程序时,会发生这种情况:

在此处输入图像描述

我的绘图代码在里面 -

(void)drawRect:(CGRect)rect {}

Slider.h的继承框架UISlider。如果我继承自 say UIButton,则只会出现我的绘图。

这是为什么?

4

1 回答 1

2

显示结果的原因在于UISlider(在许多其他控件中)实际上由多个子类组成,这些子类本身处理绘图。drawRect:结果是一个高度优化的显示代码,仅使用它不能正确覆盖UISlider。您将不得不覆盖该组合控件的其他几个部分封闭的实现。

事实上,有一个更简单、性能更高的解决方案,它提供了您希望自定义的图形元素UISlider。可以在 Apple 对Sliders的概念性介绍中找到关于该主题的精彩介绍。

不过也有一些较小的陷阱——其中之一是 aUISlider的拇指不“喜欢”被不同大小的东西替换。然而,许多教程都涵盖了这些内容——其中之一是how-to-make-a-custom-uislider

作为一个经验法则:drawRect:尽可能避免子类化和覆盖,因为它会极大地降低 UI 的性能。

相反,请查看将UIAppearance协议用于不提供自定义接口的控件的解决方案。UISlider但是确实提供了它们,因此请选择它们。

这将是我的方法优先级列表:

  1. 仔细检查相关控件是否允许通过提供图像等进行自定义。
  2. 检查有问题的控件是否符合UIAppearance协议。
  3. 使用子类化并可能覆盖drawRect:
  4. 当事实证明有问题的控件似乎以drawRect:“奇怪”的方式处理时,您UIView自己子类化并重新创建丢失的逻辑。
于 2013-12-25T23:13:16.720 回答