今天上班遇到一种情况,需要局部响应点击事件,比如在一个UIImageView中设置一个小圆圈图片,要求点击圆圈里面不响应点击,点击小圆圈外面的部分响应点击。
可以通过重写hitTest:withEvent: 和 pointInside: withEvent:方法来做到。

看一下hitTest:withEvent
*touch事件发生,创建UIEvent对象

*按照Application的view层次结构,逐层调用每个view的hitTest:withEvent:方法,并传入该event对象,view根据hitTest:withEvent:方法和来决定touch点是否包含在自己的bounds中;

*如果view的bounds包含了touch点,该view会遍历自己的subview,并调用每个subview的pointInside:withEvent:方法来进一步决定touch事件是发生在自己本身,还是自己的subview上。

*重复第二,三步,并筛选出最终接受touch事件的view对象

//继承  建子类  重写上述方法

@interface CustomImageView : UIImageView

@property (strong, nonatomic) UIBezierPath *bezierPath;

@end

@implementation CustomImageView

- (id)init

{

    self = [super init];

    if (self) {

    }

    return self;

}

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

    UIView *result = [super hitTest:point withEvent:event];

    return [self pointInside:point withEvent:event] ? self : result;

}

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

{

    return CGPathContainsPoint(self.bezierPath.CGPath, NULL, point, YES) ? YES : NO;

}

@end

//使用部分的代码
  //中间的图片

    CustomImageView *imageView = [[CustomImageView alloc] initWithFrame:CGRectMake(,, imageWidth02, imageHeight02)];

    imageView.backgroundColor = [UIColor clearColor];
imageView.userInteractionEnabled = YES; imageView.bezierPath = [UIBezierPath bezierPathWithOvalInRect:imageView.bounds]; imageView.image = [UIImage imageNamed:kCenterImg]; [self.view addSubview:imageView];

//这样就达到了点击局部响应事件的效果。关于userInteractionEnabled这个属性设置为NO的时候,表示这个view从事件队列移除出去。

UIView局部点击的更多相关文章

  1. UIView局部点击(转)

      今天上班遇到一种情况,需要局部响应点击事件,比如在一个UIImageView中设置一个小圆圈图片,要求点击圆圈里面不响应点击,点击小圆圈外面的部分响应点击.可以通过重写hitTest:withEv ...

  2. 【Swift 2.1】为 UIView 添加点击事件和点击效果

    前言 UIView 不像 UIButton 加了点击事件就会有点击效果,体验要差不少,这里分别通过自定义和扩展来实现类似 UIButton 的效果. 声明 欢迎转载,但请保留文章原始出处:) 博客园: ...

  3. IOS开发之功能模块--给任意的UIView添加点击事件

    前言:好久没写博客,今天来一波.我在实际项目开发中,会遇到这样功能需求:我已经搭好了iOS的UI界面,但是很多界面的子View用了UIView,然后这些UIView中用了UILabel和UIImage ...

  4. 【原】UIView实现点击着重效果的解决方案

    我们知道,在IOS中UIButton UIControl都有一个默认的选中效果,即点中后会图标会变暗,移开后又恢复正常.如何让UIView UIImageView等这些普通的view也实现同样的效果呢 ...

  5. iOS给UIView添加点击事件

    我要给一个UIView对象topView添加点击事件,方法如下: 步骤1:创建手势响应函数 (void)event:(UITapGestureRecognizer *)gesture { //处理事件 ...

  6. 【IOS】自定义可点击的多文本跑马灯YFRollingLabel

    需求 项目中需要用到跑马灯来仅展示一条消息,长度合适则不滚动,过长则循环滚动. 虽然不是我写的,但看了看代码,是在一个UIView里面放入两个UILabel, 在前一个快结束的时候,另一个显示.然而点 ...

  7. ios开发事件处理之:一:UIView的拖拽

    1.ios当中常⽤的事件?  触摸事件 ,加速计事件 ,远程控制事件 2.什么是响应者对象? 继承了UIResponds的对象我们称它为响应者对象 UIApplication.UIViewContro ...

  8. IOS开发基础知识碎片-导航

    1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...

  9. 转载:iOS开发之让你的应用“动”起来

    在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画.动画 ...

随机推荐

  1. BZOJ 1426 收集邮票 ——概率DP

    $f(i)$表示现在有$i$张,买到$n$张的期望 所以$f(i)=f(i+1)+\frac {n}{n-i}$ 费用提前计算,每张邮票看做一元,然后使后面每一张加1元 $g(i)$表示当前为$i$张 ...

  2. 【二分+扫描线乱搞】B. Producing Snow

    注意二分写法... http://codeforces.com/problemset/problem/923/B #include<cstdio> #include<string.h ...

  3. poj 2318 向量的叉积二分查找

    TOYS Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9350   Accepted: 4451 Description ...

  4. Codeforces983D. Arkady and Rectangles

    $n \leq 100000$个矩形,一个一个覆盖在坐标系上,每个颜色都不一样,问最后能看到几种颜色. 由于后面的颜色可以覆盖前面的颜色,可以把颜色与时间联系上,第$i$个矩形颜色$i$来把时间维变成 ...

  5. 玩转css样式选择器----当父元素只有一个子元素时居中显示,多个水平排列

  6. POJ Blue Jeans [枚举+KMP]

    传送门 F - Blue Jeans Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u ...

  7. hdu 4091 Zombie’s Treasure Chest 贪心+枚举

    转自:http://blog.csdn.net/a601025382s/article/details/12308193 题意: 输入背包体积n,绿宝石体积s1,价值v1,蓝宝石体积s2,价值v2,宝 ...

  8. R语言入门视频笔记--5--自定义函数

    自定义函数 你可以输出一段代码,创建一个你自己定义的函数 蛋是如果你两个自定义函数的名字重复的话,后面的会把前面的替换掉 举个栗子: hanshu1 <- function(x)  sqrt(v ...

  9. stm32f103c8t6命名

    stm32f103c8t6和stm32f103rbt c8:48脚.64k :rb:64脚.128k.

  10. LeetCode:926. 将字符串翻转到单调递增

    暴力法超时:思想:动态规划 public int minFlipsMonoIncrb(String S) { int result = S.length(); for (int i = 0; i &l ...