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.
如果一个项目中,有几种不同的显示风格,那就是定义多个继承样式就可以了。样式上面只需要继承我们封装好的控件后,就可以方面规范项目的字体,颜色等样式。

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