经常用到多个透明图片层叠,但又需要获取不同图片的点击事件,本文实现图片透明区域穿透点击事件

实现人体各个部位点击

  1. - (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event
  2. {
  3. CGPoint shoulderPoint = [self getNewPoint:point SetImage:shouldImage];
  4. if(CGRectContainsPoint(shouldImage.bounds,shoulderPoint)) {
  5. if ([self isAplphaSetPoint:shoulderPoint andSetImage:shouldImage]) {
  6. shouldImage.image = [UIImage imageNamed:@"man_shoulder_pressed"];
  7. return YES;
  8. }
  9. }
  10. return YES;
  11. }
  12. #param  point点转换
  13. -(CGPoint) getNewPoint:(CGPoint) point SetImage:(UIImageView *) iv {
  14. return  CGPointMake(point.x - iv.frame.origin.x,
  15. point.y - iv.frame.origin.y);
  16. }
  17. -(BOOL) isAplphaSetPoint:(CGPoint) point andSetImage:(UIImageView *) iv {
  18. NSLog(@"point: %f", point.y);
  19. UIColor *uColor = [self colorAtPixel: point setImage: iv];
  20. const CGFloat *components = CGColorGetComponents(uColor.CGColor);
  21. if (NULL != components) {
  22. NSLog(@"Red: %f Green: %f Blue: %f alpha: %f", components[0], components[1], components[2], components[3]);
  23. float aplphaF = components[3];
  24. if ((aplphaF >= 0.5)) {
  25. return YES;
  26. }
  27. }
  28. return NO;
  29. }
  30. #param 点击时间结束 逻辑处理
  31. -(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
  32. }
  33. - (UIColor *)colorAtPixel:(CGPoint)point setImage: (UIImageView *) iv {
  34. if (!CGRectContainsPoint(CGRectMake(0.0f, 0.0f, iv.frame.size.width, iv.frame.size.height), point)) {
  35. return nil;
  36. }
  37. NSInteger pointX = trunc(point.x);
  38. NSInteger pointY = trunc(point.y);
  39. CGImageRef cgImage = iv.image.CGImage;
  40. NSUInteger width = iv.frame.size.width;
  41. NSUInteger height = iv.frame.size.height;
  42. CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
  43. int bytesPerPixel = 4;
  44. int bytesPerRow = bytesPerPixel * 1;
  45. NSUInteger bitsPerComponent = 8;
  46. unsigned char pixelData[4] = { 0, 0, 0, 0 };
  47. CGContextRef context = CGBitmapContextCreate(pixelData,
  48. 1,
  49. 1,
  50. bitsPerComponent,
  51. bytesPerRow,
  52. colorSpace,
  53. kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
  54. CGColorSpaceRelease(colorSpace);
  55. CGContextSetBlendMode(context, kCGBlendModeCopy);
  56. // Draw the pixel we are interested in onto the bitmap context
  57. CGContextTranslateCTM(context, -pointX, pointY-(CGFloat)height);
  58. CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, (CGFloat)width, (CGFloat)height), cgImage);
  59. CGContextRelease(context);
  60. // Convert color values [0..255] to floats [0.0..1.0]
  61. CGFloat red   = (CGFloat)pixelData[0] / 255.0f;
  62. CGFloat green = (CGFloat)pixelData[1] / 255.0f;
  63. CGFloat blue  = (CGFloat)pixelData[2] / 255.0f;
  64. CGFloat alpha = (CGFloat)pixelData[3] / 255.0f;
  65. return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
  66. }

IOS 多个ImageView图片层叠透明区域点击事件穿透的更多相关文章

  1. iOS 使点击事件穿透透明的UIView

    如图: 悬浮的三个按钮下方有一个可以点击的灰色区域,但是点击按钮之间的透明区域, 这三个按钮的contentView会响应这个点击事件,这时候需要让这个contentView不响应这个点击事件. 解决 ...

  2. Android EditText中插入图片并响应点击事件

    EditText中插入图片基本就是两种方法: ,通过Html.fromHtml(..)来实现 [mw_shl_code=java,true]eText.append(Html.fromHtml(&qu ...

  3. IOS开发中如何给UIImageView添加点击事件

    1.先创建一个UIImageView控件: photeImageView = [[UIImageView alloc]init]; photeImageView.frame = CGRectMake( ...

  4. iOS全埋点解决方案-控件点击事件

    前言 ​ 我们主要介绍如何实现控件点击事件($AppClick)的全埋点.在介绍如何实现之前,我们需要先了解一下,在 UIKit 框架下,处理点击或拖动事件的 Target-Action 设计模式. ...

  5. iOS UITapGestureRecognizer手势和UIButton 以及UITabelView点击事件冲突

    一:在同一个view上加载,UITapGestureRecognizer手势,UIButton 行为,UITabelView点击事件冲突: 二:解决方式: 在UITapGesttureRecogniz ...

  6. ios 给移动的控件添加点击事件

    前言: 给一个UIView做移动动画,虽然看起来frame在持续改变,但是它的frame已经是最终值了. 也就是说表面看到的动画都是假象,它的真实位置已经是固定的了.所以只有点击在他的真实frame范 ...

  7. ios执行失去焦点,不执行点击事件

    原因:由于JavaScript为单线程,同一时间只能执行处理一个事件.“blur优先于click执行”.而在本示例中,由于blur处理程序,会将对下拉框展示区隐藏,所以导致其后续click事件并不会执 ...

  8. Android ImageView图片透明区域不响应点击事件,不规则图片透明区域响应点击事件

    转载:http://blog.csdn.net/aminfo/article/details/7872681 经常会在项目中用到透明图片,不规则图片,特别是做游戏的时候,需要对图片的透明区域的点击事件 ...

  9. iOS开发之ImageView复用实现图片无限轮播

    在上篇博客中iOS开发之多图片无缝滚动组件封装与使用给出了图片无限轮播的实现方案之一,下面在给出另一种解决方案.今天博客中要说的就是在ScrollView上贴两个ImageView, 把ImageVi ...

随机推荐

  1. ES的安装运行

    一.安装,运行 1. 检查java的版本环境 Elasticsearch依赖Java,在书写本文档的时候,推荐使用Oracle JDK 1.8.0_20 或 1.7.0_55以后的版本. 在安装Ela ...

  2. ubuntu14.04.1 LTS 64bits较快的更新源

    网上关于ubuntu更新源的帖子一大堆,但是我使用网易源的时候,执行sudo apt-get update命令的时候,总是在最后几步出现hash校验的问题,虽然没什么大的影响,但是对于患有强迫症晚期综 ...

  3. 纯JS写出日历

    封装代码: (function(cmf){ cmf.showDcalendar=function(){ var fnname=cmf.fn var id="cmfrili2" va ...

  4. MyISAM 和 InnoDB 讲解[转]

    MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处 ...

  5. Python深入学习笔记(二)

    计数器Counter Counter类是自Python2.7起增加的,属于字典类的子类,是一个容器对象,主要用来统计散列对象,支持集合操作+.-.&.|,其中后两项分别返回两个Counter对 ...

  6. 从用python自动生成.h的头文件集合和类声明集合到用python读写文件

    最近在用python自动生成c++的类.因为这些类会根据需求不同产生不同的类,所以需要用python自动生成.由于会产生大量的类,而且这些类是变化的.所以如果是在某个.h中要用include来加载这些 ...

  7. 关于一个简单面试题(。net)

    猫大叫一声,主人被惊醒,所有的小老鼠开始逃窜. 期初想到的是事件调用方法. 在猫叫的事件中调用一对方法就可以了. 但是,当事件很多的时候 难保大家写着写着就忘记了. 总不能有 10000个人的时候调用 ...

  8. Quartz1.8.5例子(八)

    /* * Copyright 2005 - 2009 Terracotta, Inc. * * Licensed under the Apache License, Version 2.0 (the ...

  9. jquery插件,美化select标签

    最近经常与select打交道,因为ie下的select实在太丑了,css怎么搞都搞不好看,因为程序已经写得差不多了,要再去模拟select改动太大,就想着能否不改动select,同时美化它.借鉴一下这 ...

  10. common头文件

    #ifndef COMMON_HHH #define COMMON_HHH #define ASSERT(p) \ do{\ if (!p){\ printf("%s:%d\n", ...