![]() |
1
8
就像其他人说的,你应该有一个合理的表面来注册触摸事件,但我相信你知道这一点,并有你的理由,所以我会告诉你我是如何做到的: 我不久前就需要这么做,我所做的就是SixtenOtto所建议的。在我最初的问题(“更新”部分)中,有一些提示可以在某个点获取图像的alpha值: How to create a transparent window with non-rectangular buttons? 编辑: 我建议在下面的示例中对uicontrol进行子类化,但是如果除了按钮的“非矩形”之外,您不需要对按钮进行任何特殊的操作,那么只需使用PNG对无边界uibutton进行子类化即可完成此任务,并且所需的工作更少。通过对uicontrol子类化并以“硬方式”进行操作,您可以对控件的行为进行更多的控制。
我建议你分类
首先,您需要加载图像并获取其位图表示:
然后您可以将其绘制到控件的视图中:(其中StateImage是指向必须绘制的图像的指针,具体取决于是否按下按钮)
此时,您已经用PNG图像绘制了按钮。如果alpha不是0,则可以重写touch事件方法并处理事件:
我就是这么做的,而且效果很好。希望这有帮助! N.B:我的例子是在Mac上,但它也应该在iPhone上运行,可能稍作修改。 |
![]() |
2
7
听起来您希望按钮的可单击区域与您使用的PNG完全匹配。 如果这就是你要找的,我首先会说不要这样做。iPhone是用手指按压的,一般来说,手指无法准确区分如此小的区域。 但是,如果您坚持这个想法,那么解决方案是根本不使用按钮,而是在父框架中处理单击,并手动解释单击的X/Y值,以确定它是否在某个边界区域中(对于圆角按钮,可能包括对检查4个圆和2个矩形的结果进行ORING)。 编辑: 意识到您最初的问题的一部分,我注意到您提到您想要基于alpha通道自动处理函数。虽然我会推荐我的边界区域方法,但理论上可以通过对png进行采样来测试alpha通道,该通道的值由按钮的原点偏移。甚至可以在普通按钮的单击事件中执行此操作。 |
![]() |
3
5
矩形按钮是一种按钮类型,您可以使用自定义按钮类型并指定图像以去除按钮的矩形边缘…这里是对按钮类型的引用 http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIButton_Class/UIButton/UIButton.html#//apple_ref/doc/c_ref/UIButtonType 对UIButton http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIButton_Class/UIButton/UIButton.html |
![]() |
4
2
AS Guvante says ,依靠精确的触摸确实不是一个好主意。例如,苹果公司建议 controls be at least 44px across .
我建议使用
|
![]() |
5
1
另一种选择是将按钮拆分为多个矩形部分。 |
![]() |
6
1
|
![]() |
Safa Ads · CDN:无法下载中继URL:https://cdn.jsdelivr.net/cocoa/Specs/2/e/c/RxSwift/3.0.0-rc.1/RxSwift.podspec.json响应:SSL连接错误 1 年前 |
![]() |
sizzyd · XCode IOS如何摆脱主屏幕上的后退按钮? 2 年前 |
![]() |
xdavidliu · XCode项目对C++标准的选择没有得到尊重 2 年前 |
![]() |
Ali · UiView()内的自定义匿名闭包导航返回按钮 2 年前 |
![]() |
user3907 · Xcode问题-崩溃-无法从文件中读取属性列表 2 年前 |
![]() |
Vinod prajapat · 如何更新数组的最后一个元素? 2 年前 |