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
//大家看了之后觉得哪里代码可以更加优化,或者功能上有什么补充的,麻烦评论下,感谢了
iOS小型计算器的更多相关文章
- IOS之计算器实现
本文利用ios实现计算器app,后期将用mvc结构重构 import UIKit class CalculViewController: UIViewController { @IBOutlet we ...
- IOS实现小型计算器
作为一名初学者,编辑一款能够在IOS操作系统上运行的计算器是一件很值得自豪的事情,网络上虽然后很多相关的文章和代码,功能也很强大但是我感觉相关的计算器比加复杂,晦涩难懂,所以我想通过这个小小的计算器, ...
- IOS OC 计算器算法(不考虑优先级)
个人见解:为还在计算器算法方面迷惑的同学一个数据处理解决方案:定义一个可变数组array,一个可变字符串str,使字符通过[array addObject:str];方法添加到可变数组,每当触发运算符 ...
- ios小型服务器环境配置
之前买的一台二手iphone4退役了,上闲鱼上一看,就值200,而且耳机声音也有点轻,估计买不了什么钱 于是网上看看能不能有什么废物利用的法子,看到说做行车记录仪的,有说做git服务器的,感觉挺有兴趣 ...
- iOS 收款计算器算法
一个收款计算器算法,从之前高仿有赞Demo里面抽离的一个界面 demo 在这里 https://github.com/L-vinCent/calculView_function 显示计算记录 不能连续 ...
- html5 javascript 小型计算器
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- iOS 减法计算器
一: 在界面上拖入相应的控件 二: 给每个控件设置关联 //监听按钮的点击 - (IBAction)compute:(id)sender; //第一个文本输入框的值 @property (weak, ...
- c 语言简单计算器源码
// main.c // 计算器 // Created by qianfeng on 14-7-15. // Copyright (c) 2014年 ___FGY___. All rights ...
- 使用Olami SDK 语音控制一个支持HomeKit的智能家居的iOS程序
前言 HomeKit是苹果发布的智能家居平台.通过HomeKit组件,用户可以通过iphone.iPad和ipod Touch来控制智能灯泡,风扇.空调等支持HomeKit的智能家居,尤其是可以通过S ...
随机推荐
- Mina工作原理分析
Mina是Apache社区维护的一个开源的高性能IO框架,在业界内久经考验,广为使用.Mina与后来兴起的高性能IO新贵Netty一样,都是韩国人Trustin Lee的大作,二者的设计理念是极为相似 ...
- Mybatis学习错误之:重复加载mapper.xml
学习mybatis的时候,突然遇到测试出错.测试mapper代理失败,现在钻研少了,不喜欢看未知的错误了,立即改正.错误打印说mapper.xml已经注册,仔细查看SQLMapConfig.xml发现 ...
- d
1.sql题1表名:成绩表姓名 课程 分数张三 语文 81张三 数学 75李四 语文 56李四 数学 9 ...
- 30天C#基础巩固-----多态,工厂模式
自己要有自信,相信自己可以找到好的工作.面对校招,企业更加看重自己的基础,这30天就把C#的基础好好的复习,学习下.笔记一定要认真的记录,这样自己复习回顾的时候就有了可以参考的东西了. 一: ...
- WCF双工通讯以及客户端间的间接通讯
由于学习计划安排不当,对WCF的认知一直停滞不前,最近工作上又用回了WCF,重拾一下,看到蒋老师介绍双工通讯的博文,实践一下,积累一下.原想着WCF的双工通讯就是原本的客户端能调用服务端的方法之余,服 ...
- IN31志愿者“孝行天下,感恩父母”晚会
IN31是一群志愿者,为社会倾力奉献与引发爱的公益组织.成功举办第一场孝行天下的大型公益活动
- WCF Throttling 限流的三道闸口
WCF Throttling 限流的三道闸口 一.WCF Throttling 流量限制简介 我们期望WCF服务端能够处理尽可能多的并发请求,但是资源是有限的,服务不可能同时处理无限多的并发请求,如 ...
- MFC 阶段学习总结
由于项目需求,需要用到C++开发软件,所以开始学习C++,重点是MFC,因为是窗体应用,感觉win32的比较麻烦,还是MFC方便点.至于为什么要用C++呢, 由于C++应用不需要客户额外安装环境和加密 ...
- SSH实例(2)
在WebContent\WEB-INF\下新建两个文件:applicationContext.xml和web.xml. web.xml: <?xml version="1.0" ...
- .net下mysql存储过程返回自定义值(原创)
ado.net方法 public static string ExecuteQueryProc(string sConnStr, string sSql, Hashtable args) { MySq ...