从UISlider继承时会出现一个额外的滑块

时间:2013-12-25 10:59:32

标签: ios inheritance storyboard uislider paint-code

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

enter image description here

我的绘图代码在里面 -

  

(void)drawRect:(CGRect)rect {}

我的Slider.h继承了fram UISlider。如果我从说UIButton继承,则仅显示我的绘图。

为什么?

1 个答案:

答案 0 :(得分:2)

显示的结果是因为UISlider(在许多其他控件中)实际上由多个子类组成,这些子类自己处理绘图。结果是高度优化的显示代码,仅使用drawRect:上的UISlider无法正确覆盖。您必须覆盖该组合控件的其他几个部分关闭的实现。

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

虽然有一些较小的陷阱 - 其中一个是UISlider的拇指不喜欢被不同尺寸的东西取代的事实。然而,许多教程都涵盖了这些教程 - 其中一个是how-to-make-a-custom-uislider

根据经验:尽可能避免使用子类化和覆盖drawRect:,因为这会极大地降低用户界面的性能。

相反,请查看将UIAppearance协议用于不提供自定义接口的控件的解决方案。 UISlider然而确实提供了它们,所以去那些。

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

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