国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

觸摸事件的攔截

2019-11-14 19:38:16
字體:
供稿:網(wǎng)友

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

 

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

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

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

實(shí)例化三種顏色的視圖:

 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 }

 

通過以下兩個(gè)方法來進(jìn)行手勢攔截:

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

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

把hitTest的點(diǎn)轉(zhuǎn)換為 redView的點(diǎn),使用convertPoint: toView;

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

判斷一個(gè)點(diǎn)是否在視圖的內(nèi)部:

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

hitTest攔截時(shí)間的代碼:

 1 -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 2 { 3     //1.判斷當(dāng)前視圖是否能接受用戶響應(yīng) 4     /*self.UserInteractionEnabled=YES 5       self.alpha > 0.01; 6       self.hidden = no; 7      */ 8     //2.遍歷其中的所有的子視圖,能否對用戶觸摸做出相應(yīng)的響應(yīng) 9     //3.把event交給上級視圖活上級視圖控制器處理10     //4.return nil;如果返回nil,說明當(dāng)前視圖及其子視圖均不對用戶觸摸做出反應(yīng)。11     /*12      參數(shù)說明:13         point:參數(shù)是用戶觸摸位置相對于當(dāng)前視圖坐標(biāo)系的點(diǎn);14      注視:以下兩個(gè)是聯(lián)動(dòng)使用的,以遞歸的方式判斷具體響應(yīng)用戶事件的子視圖15             - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;16             - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;17         這兩個(gè)方法僅在攔截觸摸事件時(shí)使用,他會(huì)打斷響應(yīng)者鏈條,平時(shí)不要調(diào)用。18      提醒:如果沒有萬不得已的情況,最好不要自己重寫hitTest方法;19      */20     CGPoint redP = [self convertPoint:point toView:self.redView];21     //轉(zhuǎn)換綠色視圖的點(diǎn)22     CGPoint greenP = [self convertPoint:point toView:self.greenView];23     //pointInside  使用指定視圖中的坐標(biāo)點(diǎn)來判斷是否在視圖內(nèi)部,最好不要在日常開發(fā)中都用。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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 霍邱县| 常州市| 阿巴嘎旗| 上高县| 东乡县| 夏河县| 阿拉善左旗| 抚顺市| 沾化县| 晋中市| 德阳市| 隆回县| 汉阴县| 交口县| 夏津县| 绥棱县| 卢氏县| 彭泽县| 罗源县| 宿松县| 深泽县| 黄陵县| 武夷山市| 调兵山市| 德清县| 临高县| 依兰县| 砚山县| 长乐市| 江华| 武安市| 延安市| 高邮市| 桂平市| 乌拉特后旗| 互助| 贵德县| 孟州市| 绥芬河市| 苗栗县| 三亚市|