關於APP啟動引導頁面模塊 時間:2016年6月14日 作者:趙銳 模塊使用說明 模塊暴露在外的介面是- (void)showGuideViewWithImages:(NSArray *)images;調用時候需要傳入引導頁圖片的名字數組即可。 註意:調用該方法需要在- (void)viewDidA ...
關於APP啟動引導頁面模塊
時間:2016年6月14日
作者:趙銳
- 模塊使用說明
模塊暴露在外的介面是- (void)showGuideViewWithImages:(NSArray *)images;調用時候需要傳入引導頁圖片的名字數組即可。
@interface GuideManager : NSObject /** * 實現功能:APP啟動引導圖 * * @param images 引導圖圖片的名字數組 */ - (void)showGuideViewWithImages:(NSArray *)images;
註意:調用該方法需要在- (void)viewDidAppear: (BOOL)animated; 中調用。
- 模塊實現
主要思路是在用戶第一次啟動的時候存儲版本號,之後每次啟動頁面都和沙盒中存儲的版本號進行對比,如果一致則跳過引導圖
- (void)showGuideViewWithImages:(NSArray *)images { NSString * key = @"CFBundleShortVersionString"; //獲得當前版本號 NSString * versionString = [NSBundle mainBundle].infoDictionary[key]; //獲取沙盒中存儲的版本號 NSString * sandboxString = [[NSUserDefaults standardUserDefaults] stringForKey:key]; //判斷兩個版本號是否相等,進而判斷是否啟動引導圖 if (![versionString isEqualToString:sandboxString]&& self.window == nil) { self.images = images; self.pageControl.numberOfPages = images.count; self.window = [UIApplication sharedApplication].keyWindow; [self.window addSubview:self.guideView]; [self.window addSubview:self.pageControl]; //存儲當前版本號到沙盒 [[NSUserDefaults standardUserDefaults] setValue:versionString forKey:key]; [[NSUserDefaults standardUserDefaults] synchronize]; } }
在這個模塊的功能實現中關於傳參有兩種方案可以選擇,一種是傳入圖片的路徑,另一種是傳入圖片的名字,由於一般我們用Xcode自帶的Assets.xcassets來統一管理圖片,而這樣管理圖片時,預設圖片沒有加入到buddle中,所以如果採用傳入圖片路徑的方案會導致返回值為nil,所以選擇傳入圖片名稱,既可以簡化代碼,也可以實現功能。
關於如何處理pathForResource返回值為nil可以參考http://blog.chinaunix.net/uid-11121450-id-3460066.html。
- 關於開發模塊過程中遇到的坑
1>首先就是外部調用介面的方法,一般常在viewDidLoad方法中調用,但是如果在這裡調用啟動頁的方法會導致引導圖片添加失敗,因為此時keyWindow為nil,所以添加不上去。
2>沒有真正理解keyWindow的含義,keywindow取到的是當前活躍的window而不是視圖最底層的window。而且在這裡就算是成功添加到底層window上,也會由於最終引導頁上邊蓋著一層view而無法交互。
3>儘量在引導頁結束後移除視圖的同時進行滯空以防野指針導致奔潰。
- 程式運行截圖
關於引導頁的具體寫法就很簡單了 可以用scrollerView或者collectionView,只要在最後加一個button即可,此處就不寫了