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,如下图
![](http://img.my.csdn.net/uploads/201210/24/1351071008_4692.png)
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、编译、运行,效果如下
![](http://img.my.csdn.net/uploads/201210/24/1351071011_7086.png)
![](http://img.my.csdn.net/uploads/201210/24/1351071016_2862.png)
6、总结:xib构建UI方式与写代码方式比较?
1)通过上面代码的编写,仅仅构建一个slider和两个label就很麻烦,不断的修改frame值、调试,才能达到想要的UI效果;并且要alloc很多对象,要控制好内存,防止泄露。可想而知,如果要通过写代码构建一个复杂的UI界面,一定是件很“痛苦”的事儿
。
2)写代码方式也有其优点,比如代码条理比较清晰,出现bug容易定位;用xib的话,构建UI界面比较方便、容易,直接拖动或输入坐标值即可,但是如果控件或事件较多时,N多的连接显得比较乱,而且出现问题不容易查找,尤其连线之后如果再更改IBOulet或IBAction的名称等,更容易出现莫名奇妙的错误。
3)个人感觉,简单的界面尽量用写代码方式,如果界面比较复杂且涉及的事件不太多的话可以用xib实现。见仁见智啦!
点击下载本文源代码
实现的功能:1)不使用xib构建UI,包括一个slider、两个label;2)改变slider的值,label中slider的值随之改变;3)改变slider的值,缩放另一个label中的文本(实际就是改变该label字体的大小)
关键词:slider 缩放 不使用xib
1、创建一个Single View Application工程,命名为:SliderDemo,如下图
![](http://img.my.csdn.net/uploads/201210/24/1351071008_4692.png)
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、编译、运行,效果如下
![](http://img.my.csdn.net/uploads/201210/24/1351071011_7086.png)
![](http://img.my.csdn.net/uploads/201210/24/1351071016_2862.png)
6、总结:xib构建UI方式与写代码方式比较?
1)通过上面代码的编写,仅仅构建一个slider和两个label就很麻烦,不断的修改frame值、调试,才能达到想要的UI效果;并且要alloc很多对象,要控制好内存,防止泄露。可想而知,如果要通过写代码构建一个复杂的UI界面,一定是件很“痛苦”的事儿
。
2)写代码方式也有其优点,比如代码条理比较清晰,出现bug容易定位;用xib的话,构建UI界面比较方便、容易,直接拖动或输入坐标值即可,但是如果控件或事件较多时,N多的连接显得比较乱,而且出现问题不容易查找,尤其连线之后如果再更改IBOulet或IBAction的名称等,更容易出现莫名奇妙的错误。
3)个人感觉,简单的界面尽量用写代码方式,如果界面比较复杂且涉及的事件不太多的话可以用xib实现。见仁见智啦!
点击下载本文源代码
相关文章推荐
- iPhone开发【五】常用控件之Slider(不使用xib构建UI)
- cocos2d-x-2.0新增加了几个UI控件,这里我介绍下常用的这几个UI控件(CCControlSlider、CCControlSwitch、CCControlColourPicker)使用方法
- iphone开发之常用控件的使用详解
- cocos2d-x-2.0新增加了几个UI控件,这里我介绍下常用的这几个UI控件(CCControlSlider、CCControlSwitch、CCControlColourPicker)使用方法
- IOS开发-常用UI控件的基本使用(Transform形变属性、frame属性、center属性的使用)
- iOS开发之七:常用控件--UISlider、UISegmentedControl、UIPageControl的使用
- iOS开发之七:常用控件--UISlider、UISegmentedControl、UIPageControl的使用
- Android开发UI之常用控件的使用
- cocos2d-x-2.0新增加了几个UI控件,这里我介绍下常用的这几个UI控件(CCControlSlider、CCControlSwitch、CCControlColourPicker)使用方法
- [iPhone开发之控件的使用]UISegmentedControl的各种属性与方法的使用
- 在Android的UI开发中,有时为了界面美观而需要使用虚线。在这里我自己实现一个画虚线的控件。
- [iPhone开发之控件的使用]UIActionSheet的各种属性、方法及代理的使用
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-演示使用报表构建UI-入库业务查询模块
- WinForm界面开发之布局控件"WeifenLuo.WinFormsUI.Docking"的使用
- iPhone开发 UILocalNotification的使用
- Android开发-UI控件:PullToRefresh(ListView GridView下拉刷新)的简单使用
- android开发---7.常用控件的使用
- Android UI开发第三十篇——使用Fragment构建灵活的桌面
- WinForm界面开发之布局控件"WeifenLuo.WinFormsUI.Docking"的使用
- 关于UI的开发是使用代码还是Xib