您的位置:首页 > 产品设计 > UI/UE

iPhone开发【五】常用控件之Slider(不使用xib构建UI)

2012-12-17 14:14 309 查看
[b]转载请注明出处,原文网址:/article/1354677.html 作者:张燕广[/b]

实现的功能:1)不使用xib构建UI,包括一个slider、两个label;2)改变slider的值,label中slider的值随之改变;3)改变slider的值,缩放另一个label中的文本(实际就是改变该label字体的大小)

关键词:slider 缩放 不使用xib

1、创建一个Single View Application工程,命名为:SliderDemo,如下图



2、我们不使用xib构建UI,所以现删除ViewController.xib文件

3、修改ViewController.h后如下:

[cpp] view
plaincopy

<span style="font-family:Microsoft YaHei;font-size:18px;">#import <UIKit/UIKit.h>



@interface ViewController : UIViewController

//添加代码

@property(nonatomic,retain)UILabel *sliderValueLabel;

@property(nonatomic,retain)UISlider *slider;



@property(nonatomic,retain)UILabel *xLabel;

@property(assign,nonatomic)CGFloat initialFontSize;

@end

</span>

4、修改ViewController.m后如下:

[cpp] view
plaincopy

//

// ViewController.m

// SliderDemo

//

// Created by Yanguang Zhang on 12-10-24.

// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.

//



#import "ViewController.h"



@interface ViewController ()



@end



@implementation ViewController

//添加代码

@synthesize slider;

@synthesize sliderValueLabel;



@synthesize xLabel;

@synthesize initialFontSize;

//修改代码

/*

- (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

}*/



-(void)loadView{

UIView *myView = [[UIView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame];

[myView setBackgroundColor:[UIColor whiteColor]];

self.view = myView;

//初始化视图

[self initViews];

}



-(void)initViews{

//初始化slider

//sliderValueLabel = [[UILabel alloc]initWithFrame:CGRectMake(20, 30, 50, 40)];

//显示slider值的label

sliderValueLabel = [[UILabel alloc]init];

CGRect frame = sliderValueLabel.frame;

frame.origin.x = 20;

frame.origin.y = 30;

frame.size.width = 50;

frame.size.height = 40;

sliderValueLabel.frame = frame;



sliderValueLabel.backgroundColor = [UIColor greenColor];

sliderValueLabel.textAlignment = UITextAlignmentCenter;

sliderValueLabel.text = @"0";

//加入到view中

[self.view addSubview:sliderValueLabel];



//slider,通过sliderValueLabel的相对位置定义frame

frame.origin.x = CGRectGetMaxX(frame)+10;

frame.origin.y = CGRectGetMinY(frame);

frame.size.width = 200;

frame.size.height = 40;

slider = [[UISlider alloc]initWithFrame:frame];

slider.minimumValue = 0;//最小值

slider.maximumValue = 25;//最大值

slider.value = 0;//执行初始值

//设置响应事件(此操作同:使用xib中时将事件与操作IBAction进行关联)

[slider addTarget:self //事件委托对象

action:@selector(sliderValueChanged) //处理事件的方法

forControlEvents:UIControlEventValueChanged//具体事件

];

//加入到view中

[self.view addSubview:slider];



//X label

frame.origin.x = 0;

frame.origin.y = CGRectGetMaxY(sliderValueLabel.frame)+10;

frame.size.width = self.view.frame.size.width;

frame.size.height = self.view.frame.size.height-frame.origin.y;

xLabel = [[UILabel alloc]initWithFrame:frame];



xLabel.backgroundColor = [UIColor yellowColor];

xLabel.textAlignment = UITextAlignmentCenter;

xLabel.text = @"X";

initialFontSize = xLabel.font.pointSize;

//NSLog(@"initialFontSize=%.2f",initialFontSize);

//加入到View中

[self.view addSubview:xLabel];

}



//slider值改变时进行处理

-(void)sliderValueChanged{

//NSLog(@"sliderValueChanged");

//更新sliderValueLabel的值

sliderValueLabel.text = [[NSString alloc]initWithFormat:@"%.0f",slider.value];



//缩放xLabel的内容

CGFloat newFontSize = initialFontSize*(slider.value+1);

//NSLog(@"newFontSize=%.2f",newFontSize);

xLabel.font = [xLabel.font fontWithSize:newFontSize];

}



- (void)viewDidUnload

{

[super viewDidUnload];

slider = nil;

sliderValueLabel = nil;

xLabel = nil;

// Release any retained subviews of the main view.

}



-(void)dealloc{

[super dealloc];

[sliderValueLabel release];

[slider release];

[xLabel release];

}



- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);

}



@end

5、编译、运行,效果如下





6、总结:xib构建UI方式与写代码方式比较?

1)通过上面代码的编写,仅仅构建一个slider和两个label就很麻烦,不断的修改frame值、调试,才能达到想要的UI效果;并且要alloc很多对象,要控制好内存,防止泄露。可想而知,如果要通过写代码构建一个复杂的UI界面,一定是件很“痛苦”的事儿


2)写代码方式也有其优点,比如代码条理比较清晰,出现bug容易定位;用xib的话,构建UI界面比较方便、容易,直接拖动或输入坐标值即可,但是如果控件或事件较多时,N多的连接显得比较乱,而且出现问题不容易查找,尤其连线之后如果再更改IBOulet或IBAction的名称等,更容易出现莫名奇妙的错误。

3)个人感觉,简单的界面尽量用写代码方式,如果界面比较复杂且涉及的事件不太多的话可以用xib实现。见仁见智啦!

点击下载本文源代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐