//

//  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

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

iOS小型计算器的更多相关文章

  1. IOS之计算器实现

    本文利用ios实现计算器app,后期将用mvc结构重构 import UIKit class CalculViewController: UIViewController { @IBOutlet we ...

  2. IOS实现小型计算器

    作为一名初学者,编辑一款能够在IOS操作系统上运行的计算器是一件很值得自豪的事情,网络上虽然后很多相关的文章和代码,功能也很强大但是我感觉相关的计算器比加复杂,晦涩难懂,所以我想通过这个小小的计算器, ...

  3. IOS OC 计算器算法(不考虑优先级)

    个人见解:为还在计算器算法方面迷惑的同学一个数据处理解决方案:定义一个可变数组array,一个可变字符串str,使字符通过[array addObject:str];方法添加到可变数组,每当触发运算符 ...

  4. ios小型服务器环境配置

    之前买的一台二手iphone4退役了,上闲鱼上一看,就值200,而且耳机声音也有点轻,估计买不了什么钱 于是网上看看能不能有什么废物利用的法子,看到说做行车记录仪的,有说做git服务器的,感觉挺有兴趣 ...

  5. iOS 收款计算器算法

    一个收款计算器算法,从之前高仿有赞Demo里面抽离的一个界面 demo 在这里 https://github.com/L-vinCent/calculView_function 显示计算记录 不能连续 ...

  6. html5 javascript 小型计算器

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  7. iOS 减法计算器

    一: 在界面上拖入相应的控件 二: 给每个控件设置关联 //监听按钮的点击 - (IBAction)compute:(id)sender; //第一个文本输入框的值 @property (weak, ...

  8. c 语言简单计算器源码

    //  main.c //  计算器 //  Created by qianfeng on 14-7-15. //  Copyright (c) 2014年 ___FGY___. All rights ...

  9. 使用Olami SDK 语音控制一个支持HomeKit的智能家居的iOS程序

    前言 HomeKit是苹果发布的智能家居平台.通过HomeKit组件,用户可以通过iphone.iPad和ipod Touch来控制智能灯泡,风扇.空调等支持HomeKit的智能家居,尤其是可以通过S ...

随机推荐

  1. Android序列化之Serializable和Parcelable

    PS:还有几天就开学了.先来一发. 学习内容: 1.序列化的目的 2.Android中序列化的两种方式 3.Parcelable与Serializable的性能比较 4.Android中如何使用Par ...

  2. ES6笔记(1) -- 环境配置支持

    系列文章 -- ES6笔记系列 虽然ES6已经发布一年多了,但在各大浏览器之中的支持度还不是很理想,在这查看ES6新特性支持度 Chrome的最新版本浏览器大部分已经支持,在Node.js环境上支持度 ...

  3. 【原创】Kakfa utils源代码分析(一)

    Kafka.utils,顾名思义,就是一个工具套件包,里面的类封装了很多常见的功能实现——说到这里,笔者有一个感触:当初为了阅读Kafka源代码而学习了Scala语言,本以为Kafka的实现会用到很多 ...

  4. C#解压缩文件

    代码: #region 解压 /// <summary> /// 解压 /// </summary> public void UnZip(string zipPath, str ...

  5. 学习“迷你ASP.NET MVC框架”后的小结

    看蒋老师MVC的书第二个大收获可以是算是看了这个迷你ASP.NET MVC框架了,虽然它远不如真正ASP.NET MVC(下文简称“MVC”)那么复杂庞大,但在迷你版中绕来绕去也够呛的.这部分我看了几 ...

  6. C#遍历Dictionary

    C#遍历Dictionary方法 Dictionary<string, int> d = new Dictionary<string, int>(); foreach (Key ...

  7. 使用MiniProfiler跟踪MVC + EF + Bootstrap 2 权限管理系统的性能消耗

    安装MiniProfiler 在MVC + EF + Bootstrap 2 权限管理系统入门级(附源码)文章中下载了它的源码,调试模式下打开一个页面都要再2.5秒以上,所以使用MiniProfile ...

  8. .NET invoke NetSuite Restlet

    Please indicate the source if you need to repost. Restlet allows programmers to use the http request ...

  9. java.lang.NullPointerException org.apache.struts2.impl.StrutsActionProxy.getErrorMessage(StrutsActionProxy.java:69)

    采用SSH框架时出现了 java.lang.NullPointerException org.apache.struts2.impl.StrutsActionProxy.getErrorMessage ...

  10. jdk1.6与Myeclipse的冲突造成的

    出现这样的错误时:ERROR:JDWP   Unable   to   get   JNI   1.2   environment   ,jvm-> GetEvn()   return   =- ...