- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我终于发布了我的主要应用程序(Tap Play MMO - 检查一下 ;-)),我现在正在努力扩展它。
要做到这一点,我需要一个圆圈,里面有四个独立的按钮,这些按钮基本上是四分之一。我得出的结论是,圆形图像需要由四张图像构成,每个四分之一,但由于矩形图像形状的必要性,我最终会出现一些重叠,尽管重叠将是透明。
让它发挥作用的最佳方法是什么?我真的需要一些非常简单的东西,我看过这个 http://iphonedevelopment.blogspot.com/2010/03/irregularly-shaped-uibuttons.html
之前但尚未成功让它工作。谁能给点建议?
如果它有任何不同,我将部署到 iOS 3.X 框架(当 4.2 用于 iPad 时,将是 4.2)
最佳答案
跳过按钮,只需响应包含圆圈的 View 中的触摸。
为您想要捕获触摸的每个区域创建一个 CGPath,当您的 UIview 接收到触摸时,检查路径内的成员资格。
[编辑答案以显示框架实现细节 -- TomH]
这是我解决问题的方法:(我还没有测试过这段代码,语法可能不太正确,但这是一般的想法)
1) 使用 PS 或您最喜欢的图像创建应用程序,创建一个四分之一圆的 png。将它添加到您的 XCode 项目中。
2) 添加一个 UIView 到 UI。将 UIView 的图层内容设置为 png。
self.myView = [[UIView alloc] initWithRect:CGRectMake(10.0, 10.0, 100.0, 100,0)];
[myView.layer setContents:(id)[UIImage loadImageNamed:@"my.png"]];
3) 创建 CGPaths 来描述您感兴趣的 UIView 中的区域。
self.quadrantOnePath = CGPathCreateMutable();
CGPathMoveToPoint(self.quadrantOnePath, NULL, 50.0, 50.0);
CGPathAddLineToPoint(self.quadrantOnePath, NULL, 100.0, 50.0);
CGPathAddArc(self.quadrantOnePath, NULL, 50.0, 50.0, 50.0, 0.0, M_PI2, 1);
CGPathCloseSubpath(self.quadrantOnePath);
// create paths for the other 3 circle quadrants too!
4) 添加一个 UIGestureRecognizer 并监听/观察 View 中的点击
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
[tapRecognizer setNumberOfTapsRequired:2]; // default is 1
5) 当 tapRecognizer 调用它的目标选择器时
- (void)handleGesture:(UIGestureRecognizer *) recognizer {
CGPoint touchPoint = [recognizer locationOfTouch:0 inView:self.myView];
bool processTouch = CGPathContainsPoint(self.quadrantOnePath, NULL, touchPoint, true);
if(processTouch) {
// call your method to process the touch
}
}
不要忘记在适当的时候释放所有内容——使用 CGPathRelease 释放路径。
另一个想法:如果您用来表示圆形象限的图形只是填充颜色(即没有花哨的图形、图层效果等),您还可以使用在 UIView 的 drawRect 方法中创建的路径来也画象限。这将解决上述方法的一个缺陷:图形和用于检查触摸的路径之间没有紧密集成。也就是说,如果您将图形换成不同的东西,更改图形的大小等,用于检查触摸的路径将不同步。可能是一段需要大量维护的代码。
关于objective-c - 使用不规则形状按钮的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3755572/
negExpression : (NOT^)* primitiveElement ; 是我的规矩。我现在有这个代码: !!(1==1) 我希望我最终会得到这棵树: NOT | NOT
我遇到以下问题,我正在创建一个作为预算副本的表单,但这种类型的预算不包含增值税%,并且商品不会通过会计。 问题如下我创建了一个名为budget.table的模型如下: class TableEleme
我对 Java 相当陌生,但对一般编程不太熟悉。我在 Windows Vista 上使用 Java 1.7.0_07。我正在尝试弄清楚如何使 Swing Timer 定期计时。 我注意到,即使我设置了
我有一个静态站点,它突然显示不规则的标题。这是一个包含大量 JavaScript 的单一页面,包括页面顶部的表格选择。该网站六个月前运行良好。现在,我在 12 个不同的导航选项卡中的一半上看到无法解释
在我参加的 CS 类(class)中,有一个不规则语言的例子: {a^nb^n | n >= 0} 我可以理解它是不规则的,因为没有有限状态自动机/机器可以编写来验证和接受此输入,因为它缺少内存组件。
给定以下高频但稀疏的时间序列: #Sparse Timeseries dti1 = pd.date_range(start=datetime(2015,8,1,9,0,0),periods=10,fr
我有 X、Y、Z 格式的数据,其中所有数据都是一维数组,Z 是坐标 (X,Y) 处的测量幅度。我想将此数据显示为等高线或“imshow”图,其中等高线/颜色代表 Z 值(幅度)。 用于测量和 X 和
这是 Stackoverflow 上的一个递归问题,但给出的解决方案 here仍然不完美。对我来说,屈服仍然是 python 中最复杂的东西之一,所以我不知道如何自己修复它。 当给定函数的任何列表中的
我使用 PHP 5.3.3 在 RHEL 6 服务器上部署了一个 symfony 1.4 项目。我不定期地在 php 错误日志中收到条目,提示找不到 sfProjectConfiguration 并且
我是一名优秀的程序员,十分优秀!