跳过按钮,直接响应包含圆形的视图中的触摸。为要捕获触摸的每个区域创建一个CGPath,当您的UIview接收到触摸时,请检查成员身份是否在路径内。以下是我解决问题的方法:(我尚未测试此代码,语法可能不完全正确,但这是大致的想法)1)使用PS或您喜欢的图像创建应用程序,创建一个四分之一圆的png。将其添加到XCode项目中。2)向UI添加UIView。将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并监听/观察视图中的轻击手势
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) {
}
}
在适当的时候不要忘记释放所有东西 -- 使用CGPathRelease来释放路径。
另一个想法:如果你用来表示圆形象限的图形仅仅是一个填充颜色(即没有花哨的图形,层效果等),你也可以使用UIView的drawRect方法中创建的路径来绘制象限。这将解决上述方法的一个缺陷:图形和用于检测触摸的路径之间没有紧密的集成。也就是说,如果你更换图形,改变图形的大小等,用于检测触摸的路径将失去同步。潜在地需要高维护性的代码。