跳過按鈕和簡單地以觸摸響應像素的α值的包含圓的視圖。
爲您想要捕捉觸摸的每個區域創建一個CGPath,當您的UIview收到觸摸時,檢查路徑內的成員資格。
[編輯答案顯示骨架的實施細則 - TomH]
下面我將如何處理這個問題:(我沒有測試過這個代碼和語法可能不是很正確,但是這是總體思路)
1)使用PS或你最喜歡的圖像創建應用程序,創建一個四分之一圓圈的PNG。將它添加到您的XCode項目中。
2)添加一個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) {
// call your method to process the touch
}
}
不要忘記釋放一切適當時 - 使用CGPathRelease釋放路徑。
另一個想法:如果您用來表示圓形象限的圖形只是填充顏色(即沒有花哨的圖形,圖層效果等),那麼您也可以使用在UIView的drawRect方法中創建的路徑畫出象限。這將解決上述方法的缺陷之一:圖形和用於檢查觸摸的路徑之間沒有緊密集成。也就是說,如果您換出不同圖形的圖形,請更改圖形的大小等,則用於檢查觸摸的路徑將不同步。可能是一個高維護代碼。
。我的需要是45度旋轉,所以不幸的是它並不那麼簡單。 – David26th 2010-09-21 11:42:51
現在我看到問題 – vikingosegundo 2010-09-21 12:10:46
@ David26th查看我的編輯 – vikingosegundo 2010-09-21 12:21:48