iPhone开发【五】常用控件之Slider(不使用xib构建UI)
发布日期:2021-09-28 18:46:10 浏览次数:7 分类:技术文章

本文共 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后如下:

[cpp] 
  1. <span style="font-family:Microsoft YaHei;font-size:18px;">#import <UIKit/UIKit.h>  
  2.   
  3. @interface ViewController : UIViewController  
  4. //添加代码  
  5. @property(nonatomic,retain)UILabel *sliderValueLabel;  
  6. @property(nonatomic,retain)UISlider *slider;  
  7.   
  8. @property(nonatomic,retain)UILabel *xLabel;  
  9. @property(assign,nonatomic)CGFloat initialFontSize;  
  10. @end  
  11. </span>  
4、修改ViewController.m后如下:

[cpp] 
  1. //  
  2. //  ViewController.m  
  3. //  SliderDemo  
  4. //  
  5. //  Created by Yanguang Zhang on 12-10-24.  
  6. //  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.  
  7. //  
  8.   
  9. #import "ViewController.h"  
  10.   
  11. @interface ViewController ()  
  12.   
  13. @end  
  14.   
  15. @implementation ViewController  
  16. //添加代码  
  17. @synthesize slider;  
  18. @synthesize sliderValueLabel;  
  19.   
  20. @synthesize xLabel;  
  21. @synthesize initialFontSize;  
  22. //修改代码  
  23. /* 
  24. - (void)viewDidLoad 
  25. {
     
  26.     [super viewDidLoad]; 
  27.     // Do any additional setup after loading the view, typically from a nib. 
  28. }*/  
  29.   
  30. -(void)loadView{  
  31.     UIView *myView = [[UIView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame];  
  32.     [myView setBackgroundColor:[UIColor whiteColor]];  
  33.     self.view = myView;  
  34.     //初始化视图  
  35.     [self initViews];  
  36. }  
  37.   
  38. -(void)initViews{  
  39.     //初始化slider  
  40.     //sliderValueLabel = [[UILabel alloc]initWithFrame:CGRectMake(20, 30, 50, 40)];  
  41.     //显示slider值的label  
  42.     sliderValueLabel = [[UILabel alloc]init];  
  43.     CGRect frame = sliderValueLabel.frame;  
  44.     frame.origin.x = 20;  
  45.     frame.origin.y = 30;  
  46.     frame.size.width = 50;  
  47.     frame.size.height = 40;  
  48.     sliderValueLabel.frame = frame;  
  49.       
  50.     sliderValueLabel.backgroundColor = [UIColor greenColor];  
  51.     sliderValueLabel.textAlignment = UITextAlignmentCenter;  
  52.     sliderValueLabel.text = @"0";  
  53.     //加入到view中  
  54.     [self.view addSubview:sliderValueLabel];  
  55.       
  56.     //slider,通过sliderValueLabel的相对位置定义frame  
  57.     frame.origin.x = CGRectGetMaxX(frame)+10;  
  58.     frame.origin.y = CGRectGetMinY(frame);  
  59.     frame.size.width = 200;  
  60.     frame.size.height = 40;  
  61.     slider = [[UISlider alloc]initWithFrame:frame];  
  62.     slider.minimumValue = 0;//最小值  
  63.     slider.maximumValue = 25;//最大值  
  64.     slider.value = 0;//执行初始值  
  65.     //设置响应事件(此操作同:使用xib中时将事件与操作IBAction进行关联)  
  66.     [slider addTarget:self //事件委托对象  
  67.             action:@selector(sliderValueChanged) //处理事件的方法  
  68.             forControlEvents:UIControlEventValueChanged//具体事件  
  69.      ];  
  70.     //加入到view中  
  71.     [self.view addSubview:slider];  
  72.       
  73.     //X label  
  74.     frame.origin.x = 0;  
  75.     frame.origin.y = CGRectGetMaxY(sliderValueLabel.frame)+10;  
  76.     frame.size.width = self.view.frame.size.width;  
  77.     frame.size.height = self.view.frame.size.height-frame.origin.y;  
  78.     xLabel = [[UILabel alloc]initWithFrame:frame];  
  79.       
  80.     xLabel.backgroundColor = [UIColor yellowColor];  
  81.     xLabel.textAlignment = UITextAlignmentCenter;  
  82.     xLabel.text = @"X";  
  83.     initialFontSize = xLabel.font.pointSize;  
  84.     //NSLog(@"initialFontSize=%.2f",initialFontSize);  
  85.     //加入到View中  
  86.     [self.view addSubview:xLabel];  
  87. }  
  88.   
  89. //slider值改变时进行处理  
  90. -(void)sliderValueChanged{  
  91.     //NSLog(@"sliderValueChanged");  
  92.     //更新sliderValueLabel的值  
  93.     sliderValueLabel.text = [[NSString alloc]initWithFormat:@"%.0f",slider.value];  
  94.       
  95.     //缩放xLabel的内容  
  96.     CGFloat newFontSize = initialFontSize*(slider.value+1);  
  97.     //NSLog(@"newFontSize=%.2f",newFontSize);  
  98.     xLabel.font = [xLabel.font fontWithSize:newFontSize];  
  99. }  
  100.   
  101. - (void)viewDidUnload  
  102. {  
  103.     [super viewDidUnload];  
  104.     slider = nil;  
  105.     sliderValueLabel = nil;  
  106.     xLabel = nil;  
  107.     // Release any retained subviews of the main view.  
  108. }  
  109.   
  110. -(void)dealloc{  
  111.     [super dealloc];  
  112.     [sliderValueLabel release];  
  113.     [slider release];  
  114.     [xLabel release];  
  115. }  
  116.   
  117. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  
  118. {  
  119.     return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);  
  120. }  
  121.   
  122. @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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:iPhone开发【六】常用控件之Picker View
下一篇:iPhone开发【四】常用控件之ActionSheet与AlertView

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月31日 21时14分01秒