iOS代码实现常用控件之Slider 文字缩放

来源:互联网 发布:文件夹恢复软件 编辑:程序博客网 时间:2024/06/11 10:04

iOS代码实现常用控件之Slider 文字缩放


    修改ViewController.h后如下:
#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  

修改ViewController.m后如下:

#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

编译、运行,效果如下:


总结:xib构建UI方式与写代码方式比较?
1)通过上面代码的编写,仅仅构建一个slider和两个label就很麻烦,不断的修改frame值、调试,才能达到想要的UI效果;并且要alloc很多对象,要控制好内存,防止泄露。可想而知,如果要通过写代码构建一个复杂的UI界面,一定是件很“痛苦”的事儿 。
2)写代码方式也有其优点,比如代码条理比较清晰,出现bug容易定位;用xib的话,构建UI界面比较方便、容易,直接拖动或输入坐标值即可,但是如果控件或事件较多时,N多的连接显得比较乱,而且出现问题不容易查找,尤其连线之后如果再更改IBOulet或IBAction的名称等,更容易出现莫名奇妙的错误。


0 0