IOS 多个ImageView图片层叠透明区域点击事件穿透

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

实现人体各个部位点击

[objc] view plain copy

  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. }
时间: 2024-11-03 14:59:19

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

百度地图上自定义图片覆盖物上加点击事件

在百度地图上加自定义图片覆盖物之后,在这个覆盖物上加点击手势,发现并不识别.原因不太清楚.不过可以通过别的方法来实现这个功能. 需要用到BMKMapViewDelegate中的方法: - (void)mapView:(BMKMapView *)mapView onClickedMapBlank:(CLLocationCoordinate2D)coordinate 然后判断所点击的坐标是否在指定区域内,在指定区域内之后,调用自己写的相应地方法即可. 百度地图上自定义图片覆盖物上加点击事件,布布扣,

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

如图: 悬浮的三个按钮下方有一个可以点击的灰色区域,但是点击按钮之间的透明区域, 这三个按钮的contentView会响应这个点击事件,这时候需要让这个contentView不响应这个点击事件. 解决方法如下(将此方法增加到这个contentView类中即可): - (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ UIView *hitView = [super hitTest:point withEvent:event];

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

EditText中插入图片基本就是两种方法: 1,通过Html.fromHtml(..)来实现 [mw_shl_code=java,true]eText.append(Html.fromHtml("<img src='" + R.drawable.ohoh + "'/>", imageGetter, null));[/mw_shl_code] 2,通过ImageSpan与SpannableString/SpannableStringBuilder. [m

ios 过滤png 图片透明部分点击事件

解决思路引用博客:http://blog.csdn.net/ralbatr/article/details/38388801 类下载地址,按钮直接集成该类 https://github.com/Sunmair/ios/tree/master/%E5%B8%B8%E7%94%A8%E7%B1%BB%E6%96%87%E4%BB%B6/%E8%BF%87%E6%BB%A4%20PNG%20%E5%9B%BE%E7%89%87%E9%80%8F%E6%98%8E%E9%83%A8%E5%88%86%E

iOS 子视图响应父视图的点击事件

最近为了解决 点击子视图却依然会响应父试图的点击事件发现UITapGestureRecognizer上的一个代理方法: -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 如果返回no则不响应,因此我们可以根据isDescendantOfView:方法来判定一个视图是否在其父视图的视图层中.把我们不想让其响应的子视图拿出来判断一下,如果包含这个子

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

转载:http://blog.csdn.net/aminfo/article/details/7872681 经常会在项目中用到透明图片,不规则图片,特别是做游戏的时候,需要对图片的透明区域的点击事件做特别处理. 一.先上图片文件transparent.png,图片中间区域与外围区域是非透明的,其它区域是透明的: 二.上布局文件test.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout

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

在上篇博客中iOS开发之多图片无缝滚动组件封装与使用给出了图片无限轮播的实现方案之一,下面在给出另一种解决方案.今天博客中要说的就是在ScrollView上贴两个ImageView, 把ImageView进行交替切换来实现图片的无限轮播,在轮播时去修改ImageView上的图片.上一篇博客中是有几张图片就实例化几个ImageView, 然后事先把Image贴到相应的ImageView上,这种做法比较简单,而且易于实现. 今天这篇博客就要实现使用两张ImageView, 交替的区展示Image,

iOS.TextKit.02.文字图片混合排版

1.案例如图 2.代码 TextKit02ViewController.h #import <UIKit/UIKit.h> @interface TextKit02ViewController : UIViewController @property (nonatomic,strong) IBOutlet UITextView *textView; @property (nonatomic,weak) IBOutlet UIImageView *imageView; // 文本可以排版的区域

IOS UIScrollView详解 & 图片缩放功能

一 UIScrollView 简介 UIScrollView是能滚动的视图控件,可以通过滚动的方式来展示类容. 二 UIScrollView常见属性 //设置UIScrollView滚动的位置 @property(nonatomic) CGPoint contentOffset;  //设置UIScrollView内容的尺寸,滚动范围 @property(nonatomic) CGSize contentSize;  //设置UIScrollView的4周增加额外的滚动区域 @property(