重寫一個(gè)Button類,這個(gè)button類繼承與UIButton,重寫- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event,方法就可以擴(kuò)大按鈕的點(diǎn)擊區(qū)域.修改bounds的值就可以滿足需求,詳細(xì)實(shí)現(xiàn)見下面的代碼注釋.
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event {
//通過(guò)修改bounds 的x,y 值就可以只向X 軸或者Y軸的某一個(gè)方向擴(kuò)展
//當(dāng)bounds 的X 為負(fù),Y 為0,就只向X的正方向擴(kuò)展點(diǎn)擊區(qū)域,反之亦然
//當(dāng)bounds 的Y 為負(fù),X 為0,就只向Y的正方向擴(kuò)展點(diǎn)擊區(qū)域,反之亦然
//當(dāng)bounds 的Y 為0,X 為0,widthDelta,heightDelta來(lái)控制擴(kuò)大的點(diǎn)擊區(qū)域 ,這個(gè)是同時(shí)向X 軸正負(fù)方向或者同時(shí)向Y軸的正負(fù)方向
CGRect bounds =CGRectMake(0, -70, self.bounds.size.width, self.size.height);
//90 是希望的X 軸或者Y軸方向的點(diǎn)擊區(qū)域的寬度或者高度
CGFloat widthDelta =90- bounds.size.width;
CGFloat heightDelta =90- bounds.size.height;
bounds =CGRectInset(bounds, 0, -0.5* heightDelta);//注意這里是負(fù)數(shù),擴(kuò)大了之前的bounds的范圍
return CGRectContainsPoint(bounds, point);
}