iPhone开发——Slider(不使用xib构建UI)

Home / iOS MrLee 2015-6-15 2829

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


2、我们不使用xib构建UI,所以现删除ViewController.xib文件
3、修改ViewController.h后如下:
#import 
@interface ViewController : UIViewController
//添加代码
@property(nonatomic,retain)UILabel *sliderValueLabel;
@property(nonatomic,retain)UISlider *slider;
@property(nonatomic,retain)UILabel *xLabel;
@property(assign,nonatomic)CGFloat initialFontSize;
@end

4、修改ViewController.m后如下:
//
//  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://www.it72.com/3058.htm

推荐阅读
最新回复 (0)
返回