IOS 應用/遊戲項目應該如何靈活封裝 控件顯示樣式與項目顏色的公用

UILabel的屬性設置可以有以下這些:

UILabel *label = [[UILabel allocinitWithFrame:CGRectMake(0, 07540)];   //聲明UIlbel並指定其位置和長寬

 label.backgroundColor = [UIColor clearColor];   //設置label的背景色,這裏設置爲透明色。

 label.font = [UIFont fontWithName:@"Helvetica-Bold" size:13];   //設置label的字體和字體大小。 

 label.transform = CGAffineTransformMakeRotation(0.1);     //設置label的旋轉角度

 label.text = @“helloworld”;   //設置label所顯示的文本

 label.textColor = [UIColor whiteColor];    //設置文本的顏色

 label.shadowColor = [UIColorcolorWithWhite:0.1falpha:0.8f];    //設置文本的陰影色彩和透明度。

 label.shadowOffset = CGSizeMake(2.0f2.0f);     //設置陰影的傾斜角度。

 label.textAlignment = UITextAlignmentCenter;     //設置文本在label中顯示的位置,這裏爲居中。

//換行技巧:如下換行可實現多行顯示,但要求label有足夠的寬度。

 label.lineBreakMode = UILineBreakModeWordWrap;     //指定換行模式

 label.numberOfLines = 2;    // 指定label的行數

首先  Label的屬性可以設置如上這些了。

但是,這樣靈活嗎?

顯然不靈活,因爲不可能想要增加一個Label控件的時候,都要去alloc 一個控件之後設置各種文字顏色與字體明顯表現得非常的繁瑣。

我們應該如何封裝Label來達到公用的效果。

解決方法:我們應該編寫一個繼承IOS各種控件的類,(比如 gobolLabel extends UILabel),在類中設置各種不同的字體與顏色。這樣,我們就可以使用cocoa中繼承Nscoding的IOS控件,重新他們的initWithFrame  和   initWithCoder 這兩個方法。

爲什麼重寫這兩個方法?

當我們所寫的程序裏沒用Nib文件(XIB)時,用代碼控制視圖內容,需要調用initWithFrame去初始化 
- (id)initWithFrame:(CGRect)frame { 
    if ((self = [super initWithFrame:frame])) { 
        // Initialization code 
    } 
    return self; 

用於視圖加載nib文件,從nib中加載對象實例時,使用 initWithCoder初始化這些實例對象 
- (id)initWithCoder:(NSCoder*)coder 

    if (self =[superinitWithcoder:coder]) { 
        // Initialization code 
    } 
    return self; 

所以,我們只要充分利用好這兩個類,如果有xib文件,我們只需要修改xib文件中的UI控件的繼承類,既可以達到整個項目樣式的一致性。如果沒有xib文件,我們可以直接編寫代碼繼承我們自定義的類即可。在類新建時會自動執行initWithFrame方法來初始化的。

比如:

NSString *font = @"Helvetica-Bold";

float font_size10 = 10.0;

float font_size11 = 11.0;

@implementation GlobalLabel

-(id)initWithCoder:(NSCoder *)aDecoder

{

    self = [super initWithCoder:aDecoder];

    if (self)

    {

        [self setTextColor:[UIColor whiteColor]];

        [self setShadowColor:[UIColor blackColor]];

        [self setShadowOffset:CGSizeMake(1.0f, 0.0f)];

        [self setFont:[UIFont fontWithName:font size:font_size11]];

    }

    return self;

}

- (id)initWithFrame:(CGRect)frame

{

    self = [super initWithFrame:frame];

    if (self)

    {   

        [self setTextColor:[UIColor whiteColor]];

        [self setShadowColor:[UIColor blackColor]];

        [self setShadowOffset:CGSizeMake(1.0f, 0.0f)];

        [self setFont:[UIFont fontWithName:font size:font_size11]];

    }

    return self;

}


但是,上面明顯還不夠靈活。這裏的顏色樣式還是使用[UIColor whiteColor] 來設定。

而UIColor類如果是針對IOS遊戲而言的話,往往是不夠用的。我們應該定義自個項目中的顏色公用類。

顏色類公用類  GameColor  (這個類方法應該是+的,應該是靜態方法不應該是類方法,才能達到靈活封裝)

GameColor 繼承UIColor 類

並且給出一個switch 方法,先使用完系統中提供的UIColor ,剩下的使用UIColor colorWithxxx 來設定RGB顏色。

IOS 中colorWithxxx 總是使用的是十六進制。這個挺麻煩,那我們應該更加靈活的添加一個RGB與十六進制之間的轉換函數就完美了。

小編這裏也直接提供方法供大家使用。

#define UIColorFromRGB(rgbValue) [UIColor \

colorWithRed:((float)((rgbValue & 0xFF0000) >>16))/255.0 \

green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \

blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]



該類與顏色幫助類旨在設置一些具有文字顯示的一些控件的顯示樣式,顏色。常用的可以這樣封裝使用的控件有:UILabel,UIButton,UITextField,UITextView.
如果一個項目中,有幾種不同的顯示風格,那就是定義多個繼承樣式就可以了。樣式上面只需要繼承我們封裝好的控件後,就可以方面規範項目的字體,顏色等樣式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章