有关自定义控件(继承于uivew)触摸事件处理的感想

无论你定义什么控件,最原始也最自由的实现方式就是继承UIView,绘制自己想要的控件,但若要响应点击等事件而且自己的控件还比较异形那自然要响应touch事件。

当控件被点击时,若控件可见度(alpha值)小与0.01,则控件默认是不响应ouch事件的。

当控件中有个别subview显示在控件外部(即subview的frame不在控件区域内),该subview默认也不响应touch事件,但自己偏偏又想处理怎么办? 经过测试调试阅读文档将此问题解决。


解决方案:

   让控件复写 -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法。 只有控件存在无论可见度是什么uikit框架会递归回调此接口。

   若要subview响应touch事件,只需判断point是否在subview控件区域内,若在则返回此subview。若不在则返回nil。



-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    BOOL isinView = NO;
    UIView *clickView = nil;
    for (UIView *showView in self.currentShowItemViewArray)
    {
        CGRect rect = showView.frame;
        if ([showView isKindOfClass:[MyTabBarView class]])
            rect = showView.bounds;
         
        isinView = CGRectContainsPoint(rect , point);
        if (isinView)
        {
            clickView = showView;
            break;
        }
    }
    
    if (isinView)
        return clickView;
    return nil;
}


subview 实现touch的回调函数接口响应touch事件即可。



经过调试发现,此方式可以定义任意形状的控件和响应方式,只要你能想到的,呵呵。。。  后续不断更新。。。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值