iOS7開發學習之路:No.9: 引導頁之三&內存釋放
之前的兩篇Blog介紹了兩種不同的引導頁的編寫方法,但是都各自有各自的缺點:利用scrollView(https://blog.csdn.net/u011156012/article/details/37592445)沒有加入可以顯示當前頁麵位置的navigation;如果直接使用PageViewController(https://blog.csdn.net/u011156012/article/details/37739205)的話,默認的屏幕下方的空白區域又顯得很紮眼,所以想要改進的話,最終還是采用ScrollView+PageControl的方法來實現。
其實這種方法是在第一種方法上的改進而已,依然是利用ScrollView來實現,不過加上了PageControll而已。
在初始化scrollview的時候也同時初始化pagecontroll
pageControl = [[UIPageControl alloc] init]; pageControl.frame=CGRectMake(110, 400, 100, 30) ; pageControl.numberOfPages = 4; // 一共顯示多少個圓點(多少頁) // 設置非選中頁的圓點顏色 pageControl.pageIndicatorTintColor = [UIColor lightGrayColor]; // 設置選中頁的圓點顏色 pageControl.currentPageIndicatorTintColor = [UIColor whiteColor]; // 禁止默認的點擊功能 pageControl.enabled = NO; pageControl.backgroundColor=[UIColor clearColor]; [self.view addSubview:pageControl];
同時在頭文件裏麵加入對ScrollView的代理<UIScrollViewDelegate>
同時在下麵兩個方法裏麵修改對pagecontroll
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ //更新UIPageControl的當前頁 CGPoint offset = scrollView.contentOffset; CGRect bounds = scrollView.frame; [pageControl setCurrentPage:offset.x / bounds.size.width]; } -(void) scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat pageWidth = self.view.frame.size.width; // 在滾動超過頁麵寬度的50%的時候,切換到新的頁麵 int page = floor((scrollView.contentOffset.x + pageWidth/2)/pageWidth) ; pageControl.currentPage = page; }
很簡單,這樣就ok了。
內存釋放。
之前開發過程中,總是用在StoryBoard中拖拽進控件的方式來設置頁麵,這樣設計的好處是可以很直觀地看到頁麵的效果,但是缺點是如果所有控件都提前布置好了,容易造成很多內存的浪費,例如有些控件並不需要一直存在,隻在需要的時候new一個,然後使用完成後release就好了。這些在MRC時候很容易實現,可是現在iOS的開發都使用ARC了,之前一篇Blog也學習了ARC的一些基礎知識,就是在一個對象沒有strong類型的指針指向時,它就會自動釋放了。下麵介紹下如何在程序中手動釋放內存。
例如我們手動alloc了一個datepicker
//init the datepicker _TheDatePicker= [[UIDatePicker alloc]initWithFrame:CGRectMake(0,self.view.frame.size.height*1/2+5, 0, 0)]; _TheDatePicker.datePickerMode = UIDatePickerModeDate; _TheDatePicker.date = _pickedDate; [_TheDatePicker setBackgroundColor:[UIColor whiteColor]]; [self.view addSubview:_TheDatePicker];
_TheDatePicker是一個私有變量,默認是strong類型的。當我們使用Datepicker選擇完成之後,我們需要把他釋放掉,因為可能用戶之後再也不需要它了,而如果僅僅使用_TheDatePicker setHidden 方法,沒法把內存釋放掉,釋放內存的方法是下麵兩行函數:
[_TheDatePicker removeFromSuperview]; _TheDatePicker = nil;
不得不提下不知道是不是Xcode5.1的一個bug?就是如果我們事前在storyboard上拖拽進去一個控件,如果我們想在程序中手動改變它的位置,控件的大小必須和之前設置的一致。
就是在我們調用frame = CGRectMaker();裏麵的4個參數的時候,前麵表示x,y坐標的可以改變,但是後麵表示width和height的兩個值必須和你在storyboard中拖拽進去的值保持一致。否則這個控件的frame是不會改變的。
最後更新:2017-04-03 05:39:27