我最近购买了paintcode。我用它来创建一个滑块。在Xcode中,当我在我的故事板中创建一个空视图并将其设置为我的滑块代码所在的类Slider.m
并运行此应用程序时,会发生以下情况:
我的绘图代码在里面 -
(void)drawRect:(CGRect)rect {}
我的Slider.h
继承了fram UISlider
。如果我从说UIButton
继承,则仅显示我的绘图。
为什么?
答案 0 :(得分:2)
显示的结果是因为UISlider
(在许多其他控件中)实际上由多个子类组成,这些子类自己处理绘图。结果是高度优化的显示代码,仅使用drawRect:
上的UISlider
无法正确覆盖。您必须覆盖该组合控件的其他几个部分关闭的实现。
事实上,有一个更容易,性能更高的解决方案,它提供了您希望自定义到UISlider
的图形元素。有关该主题的精彩介绍可以在Apple对Sliders的概念性介绍中找到。
虽然有一些较小的陷阱 - 其中一个是UISlider
的拇指不喜欢被不同尺寸的东西取代的事实。然而,许多教程都涵盖了这些教程 - 其中一个是how-to-make-a-custom-uislider。
根据经验:尽可能避免使用子类化和覆盖drawRect:
,因为这会极大地降低用户界面的性能。
相反,请查看将UIAppearance
协议用于不提供自定义接口的控件的解决方案。 UISlider
然而确实提供了它们,所以去那些。
这将是我的方法优先列表:
UIAppearance
协议。drawRect:
drawRect:
时,子类UIView
并自己重新创建缺失的逻辑。