IOS 自定义button有效点击范围

那么如何自定义按钮点击的有效区域呢,其实很简单,只要重写一个函数即可:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

系统发生触摸事件的时候会从window到父控件到子控件一个个检测触摸点是否在其中,如果在其中,则返回YES,最后返回YES的子控件作为响应事件的控件。

我们只要重写这个方法,在其中判断,是否点击了我们想要的区域,是的话就返回YES,否则返回NO,这样就实现了自定义点击的有效区域了。注意,这边并没有改变按钮的形状,按钮还是矩形的按钮,只是改变了按钮中响应区域而已。

那么接下来的问题就是,怎么判断一个点是否在一个不是矩形的区域中呢,这边可以使用UIBezierPath的方法:

- (BOOL)containsPoint:(CGPoint)point;

我们可以先根据想要的形状绘制一条path,然后判断调用上面的方法去判断即可。

例如一个正方形的按钮,怎么才能让他在它圆形的范围点击才有反应,其他的地方没有反应呢?

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    //首先调用父类的方法确定点击的区域确实在按钮的区域中
    BOOL res = [super pointInside:point withEvent:event];
    if (res) {
        //绘制一个圆形path
        UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:self.bounds];
        if ([path containsPoint:point]) {
            //如果在path区域内,返回YES
            returnYES;
        }
        returnNO;
    }
    returnNO;
}

这样,点击按钮圆形的部分才会有效果,其他地方没有反应。

时间: 2024-10-30 00:53:53

IOS 自定义button有效点击范围的相关文章

ios 控制button点击事件的触发频率

在项目中常常会遇到这样的问题: button点击就会触发相应的点击事件,比如说是向向服务器发送网络请求或者弹出弹框. 但如果用户点击频率很快的话,那就会不停的触发点击事件,从而使UI错乱. 对于这种问题我的解决方案是:设置布尔值. (1)对于与服务器有交互的点击事件:点击的时候判断bool值:在发送请求前设置一次:服务器得到应答后改变bool值即可. (2)对于无服务器交互点击事件:点击的时候判断:执行弹框前设置:弹框完成后延时0.25秒在设置. 直接上代码 .... @property (no

iOS 自定义button

UIButton默认的布局是左侧image,右侧title,如果想要改变image与title的frame,直接设置是不会有效果的.可以通过titleEdgeInsets.imageEdgeInsets分别修改image与title的位置.也可以通过继承UIButton,重写以下方法来自定义frame //image的frame - (CGRect)imageRectForContentRect:(CGRect)contentRect; //title的frame - (CGRect)title

iOS 自定义Button的高亮和normal

//根据颜色创建一个图片 + (UIImage *)createImageWithColor:(UIColor *)color rect:(CGRect)rect {     UIGraphicsBeginImageContext(rect.size);     CGContextRef context = UIGraphicsGetCurrentContext();     CGContextSetFillColorWithColor(context, [color CGColor]);   

IOS 自定义UIBUTTON 直接拖个xib 就能在button上显示多行文本 并且添加了点击的效果

拖个button继承一下  几行代码 就搞定 自用效果还行 IOS 自定义UIBUTTON 直接拖个xib 就能在button上显示多行文本 并且添加了点击的效果,布布扣,bubuko.com

iOS 为自定义tableView添加button点击事件后获取其序号

在自定义tableView中,为cell添加button点击事件后,如何获取其对应的序号? 1.创建tableView: 先创建一个成员变量: @interface MyCameraViewController ()<UITableViewDelegate,UITableViewDataSource> { UITableView *_tableView; }@end 在viewDidLoad中初始化 _tableView = [[UITableView alloc] initWithFrame

IOS开发之自定义Button(集成三种回调模式)

前面在做东西的时候都用到了storyboard,在今天的代码中就纯手写代码自己用封装个Button.这个Button继承于UIView类,在封装的时候用上啦OC中的三种回调模式:目标动作回调,委托回调,Block回调.具体的内容请参考之前的博客:“Objective-C中的Block回调模式”,“Target-Action回调模式”,“Objective-C中的委托(代理)模式”.在接下来要封装的button中将要用到上面的知识点.之前在做新浪微博中的Cell的时候用到了Block回调来确定是那

iOS防止button重复点击

项目中常会遇到在按钮的点击事件中去执行一些耗时操作.如果处理不当经常会出现连续多次点击push多次的情况,造成不好的用户体验. 一种情况是用户快速连续点击,这种情况无法避免.另一种情况是点击一次后响应时间太长,导致用户一直停留在点击界面,也会去再此点击按钮确认是否能执行下一个界面.虽然我们可以在用户点击一次后去显示一个HUB窗口隔绝用户操作,但我们并不清楚服务器去响应这个操作究竟需要多长时间,如果HUB指示器显示时间太长会显得响应特别慢,如果太短,用户很可能在指示器消失后再去点击Button,这

iOS开发 Button自定义

- (void)viewDidLoad { [super viewDidLoad]; //自定义button控件 UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect]; //设置button的位置和大小 [button setFrame:CGRectMake(50, 100, 50, 100)]; //设置button的文字 [button setTitle:@"确定" forState:UIControl

自定义button的点击区域

某些情况下我们需要按钮有不规则的形状,在这些形状内点击才有响应,例如下面的图片中: 图片中红线圈出的两处都是用按钮做的,按钮的实际布置是上面第二张图所画的那样,所有按钮都是矩形的,但是中间的按钮和一圈的转盘形状都不可能用矩形,否则点击的时候难免相互影响. 那么如何自定义按钮点击的有效区域呢,其实很简单,只要重写一个函数即可: - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 系统发生触摸事件的时候会从window到父控件到