閱讀795 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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是不會改變的。

 

<UIScrollViewDelegate>

最後更新:2017-04-03 05:39:27

  上一篇:go 快速清空linux下文本文件內容
  下一篇:go 插入法排序