本文共 4016 字,大约阅读时间需要 13 分钟。
转载请注明出处,原文网址: 作者:张燕广
实现的功能: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后如下:
- <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>
- //
- // 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实现。见仁见智啦!
转载地址:https://blog.csdn.net/h3c4lenovo/article/details/8307239 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!