你的位置:首页 > 操作系统

[操作系统]iOS小型计算器


//

//  ViewController.m

//  计算器

 

//屏幕的宽和高

#define SCREEN_W self.view.frame.size.width

#define SCREEN_H self.view.frame.size.height

 

 

#import "ViewController.h"

 

@interface ViewController ()

//用于存储输入的第一个数字

@property (nonatomic,assign) CGFloat num1;

//用于存储输入的第二个数字

@property (nonatomic,assign) CGFloat num2;

//用于存储最终结果

@property (nonatomic,assign)  CGFloat numResult;

//用于判断符号的标记

@property (nonatomic,assign) NSInteger tag;

//显示屏

@property (nonatomic,strong) UILabel *screen;

//

@property (nonatomic,strong) NSMutableString *str;

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    //开辟空间

    _str = [[NSMutableString alloc]init];

    // Do any additional setup after loading the view, typically from a nib.

#pragma mark - screen

    //先创建一个标签,用于显示

    _screen = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, SCREEN_W, SCREEN_H-400-5*10)];

    //设置屏幕的字体颜色

    [_screen setTextColor:[UIColor whiteColor]];

    //设置屏幕的背景颜色

    _screen.backgroundColor = [UIColor blackColor];

    //设置屏幕的字体大小

    _screen.font = [UIFont systemFontOfSize:40];

    //设置屏幕的字体自适应

    _screen.adjustsFontSizeToFitWidth = YES;

    //设置字体的对齐方式

    _screen.textAlignment = NSTextAlignmentRight;

    //清零

    _screen.text = [NSMutableString stringWithString:@"0"];

    [self.view addSubview:_screen];

    

#pragma mark - buttonwith+_*/

    NSArray *signArr = @[@"÷",@"x",@"-",@"+"];

    for (int i = 0; i < [signArr count]; i++) {

        UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];

        //设置按钮的文字

        [btn setTitle:signArr[i] forState:UIControlStateNormal];

        //设置按钮的位置和大小

        btn.frame = CGRectMake(((SCREEN_W-30)/4.0)*3.0+30, _screen.frame.size.height+90*(i%4)+10, (SCREEN_W-30)/4.0, 80);

        //设置按钮的背景颜色

        btn.backgroundColor = [UIColor orangeColor];

        //设置按钮字体的大小

        btn.titleLabel.font = [UIFont systemFontOfSize:40];

        //给每个按钮添加事件

        [btn addTarget:self action:@selector(calculate:) forControlEvents:UIControlEventTouchUpInside];

        [self.view addSubview:btn];

    }

    

#pragma mark - 单独添加“=”

    UIButton *goBtn = [UIButton buttonWithType:UIButtonTypeSystem];

    //设置按钮的大小和位置

    goBtn.frame = CGRectMake(((SCREEN_W-30)/4.0)*3.0+30, _screen.frame.size.height+90*4+10, (SCREEN_W-30)/4.0, 80);

    //设置按钮的背景颜色

    goBtn.backgroundColor = [UIColor orangeColor];

    //设置按钮的文字

    [goBtn setTitle:@"=" forState:UIControlStateNormal];

    //设置文字的大小

    goBtn.titleLabel.font = [UIFont systemFontOfSize:40];

    //为每个按钮添加事件

    [goBtn addTarget:self action:@selector(go:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:goBtn];

 

#pragma mark - number

    NSArray *numArr = @[@"7",@"8",@"9",@"4",@"5",@"6",@"1",@"2",@"3"];

    for (int i = 0 ; i < [numArr count]; i++) {

        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

        //设置按钮的大小和位置

        btn.frame = CGRectMake(((SCREEN_W-30)/4.0+10)*(i%3), _screen.frame.size.height+90*(i/3)+90+10, (SCREEN_W-30)/4.0, 80);

        //设置按钮的背景颜色

        btn.backgroundColor = [UIColor lightGrayColor];

        //设置按钮的文字

        [btn setTitle:numArr[i] forState:UIControlStateNormal];

        //设置文字的大小

        btn.titleLabel.font = [UIFont systemFontOfSize:40];

        //设置文字的颜色

        [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

        //为每个按钮添加事件

        [btn addTarget:self action:@selector(expressNum:) forControlEvents:UIControlEventTouchUpInside];

        [self.view addSubview:btn];

    }

#pragma mark - 添加清除键

    UIButton *cleanBtn = [UIButton buttonWithType:UIButtonTypeCustom];

    //设置按钮的大小和位置

    cleanBtn.frame = CGRectMake(0, _screen.frame.size.height+10, (SCREEN_W-30)/4.0, 80);

    //设置按钮的背景颜色

    cleanBtn.backgroundColor = [UIColor lightGrayColor];

    //设置按钮的文字

    [cleanBtn setTitle:@"AC" forState:UIControlStateNormal];

    //设置文字的大小

    cleanBtn.titleLabel.font = [UIFont systemFontOfSize:40];

    //设置文字的颜色

    [cleanBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

    //为每个按钮添加事件

    [cleanBtn addTarget:self action:@selector(clean:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:cleanBtn];

 

    

#pragma mark - 单独添加0

    UIButton *btn0 = [UIButton buttonWithType:UIButtonTypeCustom];

    //设置按钮的大小和位置

    btn0.frame = CGRectMake(0, SCREEN_H - 80, (SCREEN_W-30)/4.0*2+10, 80);

    //设置按钮的背景颜色

    btn0.backgroundColor = [UIColor lightGrayColor];

    //设置按钮的文字

    [btn0 setTitle:@"0" forState:UIControlStateNormal];

    //设置文字的大小

    btn0.titleLabel.font = [UIFont systemFontOfSize:40];

    //设置文字的颜色

    [btn0 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

    //为每个按钮添加事件

    [btn0 addTarget:self action:@selector(expressNum:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:btn0];

 

#pragma mark - 单独添加百分号%

    UIButton *btnPrecent = [UIButton buttonWithType:UIButtonTypeCustom];

    //设置按钮的大小和位置

    btnPrecent.frame = CGRectMake(((SCREEN_W-30)/4.0+10)*2, _screen.frame.size.height+10, (SCREEN_W-30)/4.0, 80);

    //设置按钮的背景颜色

    btnPrecent.backgroundColor = [UIColor lightGrayColor];

    //设置按钮的文字

    [btnPrecent setTitle:@"%" forState:UIControlStateNormal];

    //设置文字的大小

    btnPrecent.titleLabel.font = [UIFont systemFontOfSize:40];

    //设置文字的颜色

    [btnPrecent setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

    //为每个按钮添加事件

    [btnPrecent addTarget:self action:@selector(precent:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:btnPrecent];

 

 

#pragma mark - 单独添加点"."

    UIButton *btnPoint = [UIButton buttonWithType:UIButtonTypeCustom];

    //设置按钮的大小和位置

    btnPoint.frame = CGRectMake(btn0.frame.size.width+10, SCREEN_H-80, (SCREEN_W-30)/4.0, 80);

    //设置按钮的背景颜色

    btnPoint.backgroundColor = [UIColor lightGrayColor];

    //设置按钮的文字

    [btnPoint setTitle:@"." forState:UIControlStateNormal];

    //设置文字的大小

    btnPoint.titleLabel.font = [UIFont systemFontOfSize:40];

    //设置文字的颜色

    [btnPoint setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

    //为每个按钮添加事件

    [btnPoint addTarget:self action:@selector(expressNum:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:btnPoint];

    

#pragma mark - 单独添加点"+/-"

    UIButton *btnSign = [UIButton buttonWithType:UIButtonTypeCustom];

    //设置按钮的大小和位置

    btnSign.frame = CGRectMake(cleanBtn.frame.size.width+10, _screen.frame.size.height+10, (SCREEN_W-30)/4.0, 80);

    //设置按钮的背景颜色

    btnSign.backgroundColor = [UIColor lightGrayColor];

    //设置按钮的文字

    [btnSign setTitle:@"+/-" forState:UIControlStateNormal];

    //设置文字的大小

    btnSign.titleLabel.font = [UIFont systemFontOfSize:40];

    //设置文字的颜色

    [btnSign setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

    //为每个按钮添加事件

    [btnSign addTarget:self action:@selector(signNum:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:btnSign];

 

}

 

 

-(void) expressNum:(UIButton *)sender

{

    

    //先判断首字母是不是符号

    if ([_str hasPrefix:@"+"]||[_str hasPrefix:@"-"]||[_str hasPrefix:@"x"]||[_str hasPrefix:@"÷"]) {

        //如果是,就清零

        _str = [NSMutableString stringWithString:@""];

    }

    //连续追加数字

    [_str appendString:sender.currentTitle];

    _screen.text = [NSString stringWithString:_str];

    //将输入的第一个数字保存在num1中

    _num1 = [_screen.text doubleValue];

    //用于调试

    //NSLog(@"-----%ld",_num1);

}

//判断符号

-(void)calculate:(UIButton *)sender

{

    //先清零

    _str = [NSMutableString stringWithString:@""];

    //再重新追加符号

    [_str appendString:sender.currentTitle];

    //显示(这个可写可不写)

    _screen.text = [NSString stringWithString:_str];

    if ([_str hasPrefix:@"+"]) {

        _num2 = _num1;

        _tag = 1;

    }else if ([_str hasPrefix:@"-"]){

        _num2 = _num1;

        _tag = 2;

    }else if ([_str hasPrefix:@"x"]) {

        _num2 = _num1;

        _tag = 3;

    }else if ([_str hasPrefix:@"÷"]) {

        _num2 = _num1;

        _tag = 4;

    }

    

}

//计算结果

-(void)go:(UIButton *)sender

{

    switch (_tag) {

        case 1:

            _numResult = _num2 + _num1;

            break;

        case 2:

            _numResult = _num2 - _num1;

            break;

        case 3:

            _numResult = _num2 * _num1;

            break;

        case 4:

            _numResult = _num2 / _num1;

            break;

    }

    _screen.text = [NSString stringWithFormat:@"%lg",_numResult];

    _num1 = _numResult;

}

//清除

-(void)clean:(UIButton *)sender

{

    _str = [NSMutableString stringWithString:@""];

    _screen.text = @"0";

    _num1 = 0;

    _num2 = 0;

    _numResult = 0;

}

 

//百分号

-(void)precent:(UIButton *)sender

{

    _num1 = _num1 * 0.01;

    //注意,这里要以最简形式(占用宽度最小)输出,并且不会输出无意义的0

    _screen.text = [NSString stringWithFormat:@"%lg",_num1];

}

//正负号

-(void)signNum:(UIButton *)sender

{

    //先判断数字是否大于0,如果是,就变负

    if (_num1 >= 0) {

        //添加负号

        [_str insertString:@"-" atIndex:0];

        _num1 = [_str doubleValue];

        _screen.text = [NSString stringWithFormat:@"%lg",_num1];

    }

    //如果数字小于0,那么变为正数

    else if (_num1 < 0)

    {

        //删除负号

        [_str deleteCharactersInRange:NSMakeRange(0, 1)];

        _num1 = [_str doubleValue];

        _screen.text = [NSString stringWithFormat:@"%lg",_num1];

    }

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end

 

 

 

 

//大家看了之后觉得哪里代码可以更加优化,或者功能上有什么补充的,麻烦评论下,感谢了🙏


 




瑞士旅游签证怎么办理瑞士旅游去哪好瑞士旅游团报价优惠瑞士蜜月旅游行程参考瑞士特价旅游多少钱【腾冲旅游】—保山腾冲县最出名的美食:大救驾 【腾冲旅游】—惊艳如同邂逅秀外慧中的女子 【腾冲旅游】—腾冲坛子鸡:清肺健胃 满口溢香 【腾冲旅游】—中国最美的十大地质公园:腾冲火山 郑州到嵩县龙池曼多远?郑州到龙池曼漂流多少公里? 磐安龙溪漂流门票2015-5-7月金华磐安龙溪漂流门票价格 嵩县龙池曼漂流开业了吗?龙池曼漂流营业时间? 洛阳到龙池曼漂流有车吗?洛阳到嵩县龙池曼漂流怎么坐车? 暑期带孩子旅游注意事项及必备物品(图) 恐怖旅游景点推荐 盘点13处恐怖旅游地(胆小慎入) 盘点中国三大死海 不只是国外才有死海 夏天去哪里旅游凉快 中国夏天哪里凉快 夏天哪里旅游好 元旦去泰国要注意什么? 泰国容易得什么疾病啊?怎么样防止?医疗设备怎么样啊? 马尔代夫维斯瑞岛Viceroy Maldives Resort 的房间设施如何? 马尔代夫最近天气怎么样? STA016T Datasheet STA016T Datasheet L78M09CV Datasheet L78M09CV Datasheet STA016T13TR Datasheet STA016T13TR Datasheet 嘉兴到香港游 嘉兴到香港游 嘉兴到香港游 牡丹江到香港的旅游 牡丹江到香港的旅游 牡丹江到香港的旅游 额尔古纳到香港游 额尔古纳到香港游 额尔古纳到香港游