假如在你的運用法式中須要檢測手勢,好比點擊(tap)、二指撥動 (pinch)、拖移(pan)和扭轉(rotation),那末經由過程創立UIGestureRecognizer類來完成將非常簡略。
接上去小編給年夜家分享加載帶有手勢辨認器的XIB文件需重要的成績。
起首新建一個繼續自UIView的類,並創立響應的XIB文件
#import <UIKit/UIKit.h> @interface ZHDemoView : UIView + (instancetype)demoView; @end
供給一個類辦法以供疾速創立以後類
在.m中完成類辦法,平日從XIB中加載出來的是一個數組,所以用到了lastObject辦法
+ (instancetype)demoView { NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"ZHDemoView" owner:nil options:nil]; return [nibArray lastObject]; } 在awakeFromNib中添加響應的手勢 - (void)awakeFromNib { UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithtarget:self action:@selector(click)]; [self addGestureRecognizer:tap]; } - (void)click { NSLog(@"%s", __func__); }
別的,測試用的XIB長如許:
在根掌握器添加一個如許的View,運轉並點擊
成果是
2015-08-11 13:44:44.988 XIB
留意
[1797:362096] -[ZHDemoView click]
一切正常,接上去我們不在代碼中添加手勢,直接在XIB中添加(之前添加手勢的代碼已消除):
運轉成果:
2015-08-11 14:02:12.747 XIB
留意
[1962:374487] -[UITapGestureRecognizer superview]: unrecognized selector sent to instance 0x7fe47af49c60
可以看到是新聞發送毛病,UITapGestureRecognizer中沒有superview辦法。
回到這張圖
我們可以看到Objects欄下方有手勢辨認器和DemoView兩個對象,那末能否有能夠是由於XIB加載的對象毛病呢?
由於之條件供的類辦法中我們應用的是lastObject辦法,此次我們應用firstObject試一試
更改類辦法以下:
+ (instancetype)demoView { NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"ZHDemoView" owner:nil options:nil]; return [nibArray firstObject]; }
成果:
2015-08-11 14:13:16.847 XIB
留意
[2064:382058] -[ZHDemoView click:]
一切正常。
總結:
從XIB加載出來的是一個對象數組,平日情形下,我們只須要用到一個對象,此時用firstObject或許lastObject皆可。然則當你要應用手勢辨認器時,別弄錯你掏出的對象。建議不要在XIB中直接添加手勢辨認器,經由過程代碼手動創立更穩妥和易於保護。
以上就是本文引見加載帶有手勢辨認器的XIB文件需留意的成績,願望可以或許贊助到年夜家。
【加載帶有手勢辨認器的XIB文件需留意哪些成績】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!