gpt4 book ai didi

objective-c - 使用不规则形状按钮的简单方法

转载 作者:可可西里 更新时间:2023-11-01 03:37:40 26 4
gpt4 key购买 nike

我终于发布了我的主要应用程序(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com