iOS有時(shí)候需要判斷是否touch到某個(gè)圖的區(qū)域中淀歇。也就是touch到的這個(gè)點(diǎn)是否在某個(gè)圖的區(qū)域范圍內(nèi)甘穿。
解決問(wèn)題的辦法很多, 這里簡(jiǎn)單介紹一種。
我們可以通過(guò)CGPath創(chuàng)建一個(gè)區(qū)域渺贤,區(qū)域是由路徑做兩點(diǎn)間線段并閉合成的區(qū)域智什,然后就可以用CGPath相關(guān)函數(shù)CGPathContainsPoint判斷點(diǎn)是否在區(qū)域里了画侣。
比如這里創(chuàng)建了一個(gè)簡(jiǎn)單的矩形。它的frame為(4, 4, 10, 10)。 四個(gè)頂點(diǎn)的坐標(biāo)分別為(4, 4), (4, 14), (14, 14), (14, 4)
顯然易得, (1, 1)不在這個(gè)區(qū)域內(nèi) (5, 5)在這個(gè)區(qū)域內(nèi)未状。
我們可以驗(yàn)證一下, 代碼如下:
- (void)viewDidLoad
{
[super viewDidLoad];
CGMutablePathRef pathRef=CGPathCreateMutable();
CGPathMoveToPoint(pathRef, NULL, 4, 4);
CGPathAddLineToPoint(pathRef, NULL, 4, 14);
CGPathAddLineToPoint(pathRef, NULL, 14, 14);
CGPathAddLineToPoint(pathRef, NULL, 14, 4);
CGPathAddLineToPoint(pathRef, NULL, 4, 4);
CGPathCloseSubpath(pathRef);
CGPoint point=CGPointMake(5, 5);
CGPoint outPoint=CGPointMake(1, 1);
if (CGPathContainsPoint(pathRef, NULL, point, NO))
{
NSLog(@"point in path!");
}
if (!CGPathContainsPoint(pathRef, NULL, outPoint, NO))
{
NSLog(@"outPoint out path!");
}
}
如果判斷是否是點(diǎn)擊某個(gè)視圖可以采用
if ([touches anyobject].view == yourView){}