突出显示时如何更改 UIControl 的大小?

Posted

技术标签:

【中文标题】突出显示时如何更改 UIControl 的大小?【英文标题】:How do I change the size of a UIControl when highlighted? 【发布时间】:2014-07-31 17:02:52 【问题描述】:

我有一个UIControl 子类,它在触摸时会改变外观和大小,有点像 ios 键盘的按钮在触摸时会变成打字机手:

我不知道怎么写。这个想法是在默认按钮形状突出显示时绘制不同的形状:

                    +---+
                    |   |
+---+               |   |
|   |  -> touch ->  |   | 
+---+               +---+

但由于默认按钮小于突出显示的形状,因此较大的形状会被剪掉。我考虑了这些选项:

在默认框架之外绘图。似乎不可能。 突出显示时更改控件的大小。感觉很hacky且容易出错。 放大控件以适应更大的形状。感觉“错误”,我希望能够使用较小的默认形状的控件。

对于这种情况有最佳实践吗?

【问题讨论】:

【参考方案1】:

这里有一些方法:

    您可以在框架外绘制,您只需确保myView.clipsToBoundsFalse。这将允许您在另一个视图内的视图边界之外绘制并绘制您想要的任何额外内容。

    这可能是最干净的解决方案,但在我看来也有点“hacky”。另一种方法会很脏(如您所说)并重置帧大小。

    最后一种方法是创建另一个视图(按下的键)并将其放在原始(未按下的键)视图的顶部。

总而言之,这实际上取决于您在视图中绘制/显示的内容。

【讨论】:

我认为clipsToBounds 仅适用于子视图,不适用于在drawRect: 内完成的绘图。但我目前正在试验它,使用子视图进行绘图。 @zoul 试试看,如果我没记错的话,那么 clipsToBound 确实适用于 Core Graphics 以及子视图。 @zoul 我应该澄清一下,你不能只覆盖drawRect: 并绘制任何你想要的东西,clipsToBound 用于子视图,但如果你将其设置为NO,并放置另一个子视图在原始视图中,并在该视图中绘制,它应该可以正常工作。 看起来像clipsToBounds,在子视图中绘图是要走的路。谢谢!

以上是关于突出显示时如何更改 UIControl 的大小?的主要内容,如果未能解决你的问题,请参考以下文章

突出显示 UIControl 子类

如何为 UIControl/UIButton 动画从一种状态到另一种状态的过渡? [复制]

禁用 UIButton 的突出显示 UIControl 状态

UIControl 跟踪在不同 UIControl 上开始的触摸

UITableView 选择单元格时所有组件都更改了背景颜色

如何在滚动时突出显示/更改表格视图部分标题的背景颜色