在之前使用 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:當想要改寫一個物件的特性時,在使用繼承物件的方法上是可以獲得相當大的彈性,但是如果改寫後的物件最後與原先的物件差異甚遠,那麼還是建議直接撰寫一個新的類別,而不是使用繼承的方式,避免繼承過多且不必要的方法函式與變數。
沒有留言:
張貼留言