en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

5.11.2012

更換 UIPageControl 上 Dot 介面的方法

 

在之前使用 UIPageControl 與 UIScrollView 來實作畫面切換的效果一文中,已經介紹過如何使用 UIPageControl 與 UIScrollView 來作互動完成畫面的切換,如果對於 UIPageControl 在操作上有問題的讀者們,不妨直接參考該篇文章來設定,而下面我們就只針對更換 UIPageControl 的 Dot 介面作示範。

由於 UIPageControl 並無換置 Dot Image 的方法函式,因此我們只能選擇使用繼承的方式重新來實作出新的 Dot 介面。

首先新增一個 UIPageControl subclass,你可以從新增 Objective-C class 的項目裡找到 UIView subclass 的類型。

新增 Objective-C class

在建立好 UIPageControl subclass 之後,直接來到 .m 實作檔中改寫下列的內建方法函式。
//從UIPageControl中繼承的內建的方法函式
- (void)setCurrentPage:(NSInteger)currentPage {

    //先執行父類別的方法函式
    [super setCurrentPage:currentPage];

    //依照currentPage將所有的Dot換成對應的UIImage
    for (int i = 0; i!=[[self subviews]count]; i++) {
        UIImageView* dotImageView = [self.subviews objectAtIndex:i];
        [dotImageView setFrame:CGRectMake(dotImageView.frame.origin.x, dotImageView.frame.origin.y, 12.0, 12.0)];

        if (i == self.currentPage) {
            [dotImageView setImage:[UIImage imageNamed:@"YES.png"]];
        }
        else {
            [dotImageView setImage:[UIImage imageNamed:@"NO.png"]];
        }
    }
}

在上述程式碼中,由於我們不知道父類別(UIPageControl)在此內建方法函式中到底做了些什麼事情,所以要先執行父類別的 setCurrentPage: 方法函式,接著才實作所需要的部分(換置 Dot Image),我們將目前的頁面以 YES.png 表示,其它的頁面則以 NO.png 表示,在每次使用者進行換頁動作時,都會觸發此函式來設定 Dot Image,當然你也可以自行解析在陣列中所有的 Dot Image,並替它們換置成不同的圖案。


ps:當想要改寫一個物件的特性時,在使用繼承物件的方法上是可以獲得相當大的彈性,但是如果改寫後的物件最後與原先的物件差異甚遠,那麼還是建議直接撰寫一個新的類別,而不是使用繼承的方式,避免繼承過多且不必要的方法函式與變數。






沒有留言:

張貼留言