你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 加載帶有手勢辨認器的XIB文件需留意哪些成績

加載帶有手勢辨認器的XIB文件需留意哪些成績

編輯:IOS開發綜合

假如在你的運用法式中須要檢測手勢,好比點擊(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文件需留意哪些成績】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved