對於一款App來說,引導頁是必不可少的組成元素,每當用戶第一次安裝應用,或者更新一次應用後,首先引入眼簾的就是引導頁。一個漂亮的引導頁可以增加用戶體驗
(1)引導頁的父View是一個ScrollView,所以引導頁才能進行左右的滾動。我使用storyboard來設計,界面上只要放一個ScrollView即可。
(2)設置ScrollView的屬性,位置與大小:
- (void)setGuidePageScrollViewFrame{ self.guidepageScrollView.contentSize = CGSizeMake([[UIScreen mainScreen] bounds].size.width * 5, [[UIScreen mainScreen] bounds].size.height); [self.guidepageScrollView setUserInteractionEnabled:true]; [self.guidepageScrollView setScrollEnabled:true]; [self.guidepageScrollView setPagingEnabled:true]; [self.guidepageScrollView setShowsHorizontalScrollIndicator:false]; [self.guidepageScrollView setShowsVerticalScrollIndicator:false]; [self.guidepageScrollView setBounces:false]; [self setGuidePageImageFrame]; }
要注意ScrollView的兩個屬性的差別,frame是設置ScrollView的大小與位置。在本案例中,位置左上角為(0,0),長寬為屏幕的長寬。而contentSize是設置ScrollView內部需要顯示內容的長和寬。在ScrollView中,如果本身contentSize的長寬小於frame的長寬,那麼這個ScrollView就不能滾動。換句話說,要顯示的內容本身就比較少,根本就沒必要滾動,所以ScrollView就怎麼也不會滾動了。在這個引導頁案例中。contentSize的寬就應該是屏幕的5倍寬(引導頁共有5頁),而初始設置ScrollView的frame寬度就應該是屏幕寬度(也可以在storyboard中設置)。這樣要顯示的內容比較“長”,我們又給ScrollView設置了PageEnable屬性,就可以在一屏無法顯示完的情況下分頁顯示。
設置圖片的代碼如下:
- (void)setGuidePageImageFrame{ for (int i = 0; i < 4; i++) { UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake([[UIScreen mainScreen] bounds].size.width * i, 0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height)]; [imageView setUserInteractionEnabled:true]; [imageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@guidepage%d,i]]]; [self.guidepageScrollView addSubview:imageView ]; } UIView *view = [[UIView alloc] initWithFrame:CGRectMake([[UIScreen mainScreen] bounds].size.width * 4, 0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height)]; [view setUserInteractionEnabled:true]; [view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@guidepage0.png]]]; UIButton *loginButton = [[UIButton alloc] initWithFrame:CGRectMake((UISCREEN_WIDTH - 200) / 3, UISCREEN_HEIGHT - 100, 100, 30)]; [loginButton setTitle:@登錄 forState:UIControlStateNormal]; [loginButton.layer setBorderColor:[UIColor whiteColor].CGColor]; [loginButton.layer setBorderWidth:0.5]; [loginButton.layer setMasksToBounds:true]; [loginButton addTarget:self action:@selector(loginButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; UIButton *registerButton = [[UIButton alloc] initWithFrame:CGRectMake((UISCREEN_WIDTH - 200) / 3 + (UISCREEN_WIDTH - 200) / 3 + 100, UISCREEN_HEIGHT - 100, 100, 30)]; [registerButton setTitle:@注冊 forState:UIControlStateNormal]; [registerButton.layer setBorderColor:[UIColor whiteColor].CGColor]; [registerButton.layer setBorderWidth:0.5]; [registerButton.layer setMasksToBounds:true]; [registerButton addTarget:self action:@selector(registerButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; [view addSubview:loginButton]; [view addSubview:registerButton]; [self.guidepageScrollView addSubview:view]; }
1).定義一個PageControl:
@property(nonatomic,strong)UIPageControl *pageControl;
- (void)viewDidLoad { [super viewDidLoad]; self.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake([[UIScreen mainScreen] bounds].size.width / 2 - 50, [[UIScreen mainScreen] bounds].size.height - 50, 100, 20)]; self.pageControl.numberOfPages = 5; [self.view addSubview:self.pageControl]; [self setGuidePageScrollViewFrame]; }
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ CGFloat offsetWidth = self.guidepageScrollView.contentOffset.x; int pageNum = offsetWidth / [[UIScreen mainScreen] bounds].size.width; self.pageControl.currentPage = pageNum; }
(5)經過以上步驟,基本的引導頁功能就實現了。但是還有非常重要的一個業務邏輯:引導頁只有在第一次安裝的時候出現,以後啟動App就不會出現了。這裡就可以使用NSUserDefaults來記錄。啟動App我們就可以判斷該值是否為空,為空表示是第一次安裝,顯示引導頁,否則就直接跳到其他界面。
代碼如下:可以這樣簡單的存儲進行判斷。
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setObject:@exist forKey:@guidepage];
(6) 其實還可以在引導頁的最後一頁設置幾個按鈕,用來進入正常的程序。最後的實現效果如下:
。
.