麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

觸摸事件的攔截

2019-11-14 19:38:16
字體:
來源:轉載
供稿:網友

案例:三個疊在一起的圖形,在重疊部分通過事件攔截來響應相應視圖的手勢。

 

uiview不接受處理事件的三種情況:

  1. 不接收用戶交互:userInterfactionEnable = no;
  2. 隱藏: hidden = yes;
  3. 透明:alpha  = 0~ 0.01

注意:通過storyBoard或xib創建的視圖 , initwithFrame方法不會被執行,需要使用- (void)awakeFromNib;

實例化三種顏色的視圖:

 1 - (void)awakeFromNib 2 { 3      4         RedView *view1 = [[RedView alloc]initWithFrame:CGRectMake(20, 210, 280, 40)]; 5         [self addSubview:view1]; 6         self.redView = view1; 7          8         BlueView *view2 = [[BlueView alloc]initWithFrame:CGRectMake(60, 130, 200, 200)]; 9         [self addSubview:view2];10         [view2 setAlpha:0.5];11         self.blueView = view2;12         13         GreenView *view3 = [[GreenView alloc]initWithFrame:CGRectMake(80, 150, 160, 160)];14         [self addSubview:view3];15         [view3 setAlpha:0.5];16         self.greenView = view3;17 18 }

 

通過以下兩個方法來進行手勢攔截:

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

重寫hittext方法,攔截用戶觸摸視圖的順序
hitTest方法的都用是由window來負責觸發的。
如果希望用戶按下屏幕 , 就立刻做出響應 , 使用touchesBegin
如果希望用戶離開屏幕 , 就立刻做出響應 , 使用touchesEnd
通常情況下使用touchesBegin,以防止用戶認為點擊了沒有反應。

把hitTest的點轉換為 redView的點,使用convertPoint: toView;

 CGPoint redP = [self convertPoint:point toView:self.redView];

判斷一個點是否在視圖的內部:

if ([self.greenView pointInside:greenP withEvent:event]) {
return self.greenView;
}

hitTest攔截時間的代碼:

 1 -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 2 { 3     //1.判斷當前視圖是否能接受用戶響應 4     /*self.UserInteractionEnabled=YES 5       self.alpha > 0.01; 6       self.hidden = no; 7      */ 8     //2.遍歷其中的所有的子視圖,能否對用戶觸摸做出相應的響應 9     //3.把event交給上級視圖活上級視圖控制器處理10     //4.return nil;如果返回nil,說明當前視圖及其子視圖均不對用戶觸摸做出反應。11     /*12      參數說明:13         point:參數是用戶觸摸位置相對于當前視圖坐標系的點;14      注視:以下兩個是聯動使用的,以遞歸的方式判斷具體響應用戶事件的子視圖15             - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;16             - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;17         這兩個方法僅在攔截觸摸事件時使用,他會打斷響應者鏈條,平時不要調用。18      提醒:如果沒有萬不得已的情況,最好不要自己重寫hitTest方法;19      */20     CGPoint redP = [self convertPoint:point toView:self.redView];21     //轉換綠色視圖的點22     CGPoint greenP = [self convertPoint:point toView:self.greenView];23     //pointInside  使用指定視圖中的坐標點來判斷是否在視圖內部,最好不要在日常開發中都用。24     if ([self.greenView pointInside:greenP withEvent:event]) {25         return self.greenView;26     }27     NSLog(@"%@",NSStringFromCGPoint(redP));28     if ([self.redView pointInside:redP withEvent:event]) {30         return self.redView;31     }33     return [super hitTest:point withEvent:event];34 }

代碼在:https://github.com/zhangjinling/IOSPRogects/tree/master/%E6%89%8B%E5%8A%BF/03.%E8%A7%A6%E6%91%B8%E4%BA%8B%E4%BB%B6%E6%8B%A6%E6%88%AA


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 1314成人网 | 久久久久久久久久91 | 欧美成人a | 欧美大片一级毛片 | 精品视频 久久久 | 黄色特级一级片 | 欧美一级特黄特色大片免费 | 中文字幕在线日韩 | 欧美www| 日日草夜夜 | 精品国产一区二区亚洲人成毛片 | 免费观看又色又爽又黄的崩锅 | 黄色大片在线观看 | 黄色羞羞视频在线观看 | 97中文| 欧美在线观看视频一区二区 | 91久久精品国产亚洲 | 国产精品999在线观看 | 国产精品视频在线观看免费 | 一本免费视频 | 久久久国产精品电影 | 在线亚洲播放 | 国产一国产精品一级毛片 | 久久人人人 | 国产美女爽到喷白浆的 | 在线一级片 | 国产一国产一级毛片视频 | www69xxxxx| 国产毛片视频 | 49vv看片免费| 欧美性精品videofree | 欧美日韩免费一区二区三区 | 牛牛a级毛片在线播放 | 欧美日本91精品久久久久 | 鲁丝一区二区二区四区 | 鲁丝片一区二区三区免费入口 | 国产成人精品一区在线播放 | 1314成人网| 日韩黄色片免费看 | 欧美一级在线看 | 综合国产在线 |