这两天,前天我做了一个小计算器,今天算是复习了一下,在view上放置静态图和动态图
我感觉有时候做东西的时候很盲目,所以就试着想了想步骤:
我觉得,第一步: 根据你想要达到的功能,想好你需要的控件
第二步: 根据你的控件,拉出控件的连接点。分两类:一类是按键,一类是文本 。 然后考虑到按键一般都会有相应的响应,接下来的主要动作都是围绕按键来的。
第三步: 在接口文件中声明变量了,现在用的多的是 @VIewControl.h 和一个你创建的文件,这个计算器中 calcutor 里声明较多,@VIewControl.h 中只有一个类变量
第四步: 然后再跟据你想要达到的功能,第一步开始,一步一步去写代码。主要是根据按键功能来写,比我之前还是有些许进步的!
就以下篇代码为例:
我之前用 if 语句做的,代码很长,重复率很高。后来只好重来,用 Switch 语句来写。
这种方法 将 0--9 的数字统一,设置一个 didclick 函数里,分别用 tag 0--9 到时候只需要判断就好了。
#import "ViewController.h"
#import "calcutor.h"
@interface ViewController ()
@property (weak, nonatomic)IBOutlet UILabel *resultLabel;
@end
-------------------------------------------------------------------下面的代码是今天复习的图片编辑的结果,我将两张比较单调的图片上传到 工程里面 然后再 将其中一幅图片作为背景。
int i=10; //
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
calc=[[calcutoralloc]init];
UIImage *image = [ [ UIImage alloc ] initWithFrame : CGRectMake(0,0,320,590) ] ;
定义一个Image 类型的变量 image 并且确定它的范围( 0 , 0 , 320 , 590 ) initWithFrame 这个词是结合两句的关键,前句的 init “和” “with” 后一句的 frame
imageView.image = [ UIImage imageNamed : @"风景4.png" ] ;
//本来是将 image 的图片赋给 imageView.image 的,这一句扩展了 直接将 名字是@“ 风景4.png ”的 图片赋给了 imageView.image 简化了一个步骤。
[self.view addSubview:imageView];
//将对象 加入 界面 , self 的原因是 View 在该文件中声明。
imageView2.alpha=0.3;
// 调节图片透明度的代码 取值 0--1
}
------------------------------------------------
- (IBAction)UIButton:(UIButton *)sender
{
float value=[sender.currentTitlefloatValue];
if(calc.op=='+'||calc.op=='-'||calc.op=='x'||calc.op=='/')
{
if(calc.point=='.')
{
calc.opValue2=calc.opValue2+value/i;
i=i*10;
}
else
{
calc.opValue2=calc.opValue2*10+value;
}
self.resultLabel.text=[NSStringstringWithFormat:@"%.2f",calc.opValue2];
}
---------
上述部分判断,有了运算符号之后,对第二个操作数的有无小数点的相关赋值
--------
else
{
if (calc.point=='.')
{
calc.opValue1=calc.opValue1+value/i;
i=i*10;
}
else
{
calc.opValue1=calc.opValue1*10+value;
}
self.resultLabel.text=[NSStringstringWithFormat:@"%.2f",calc.opValue1];
}
}
--------------------------------------------------------
------------------------------------------------------
- (IBAction)dot:(UIButton *)sender {
calc.point='.';
}
- (IBAction)yunsuan:(UIButton *)sender
{
calc.point='0';
i=10;
switch (sender.tag)
//这个 Switch 函数,用 sender 原因是 当前的按键内,用 sender 来做类型名 tag 值就是 + - x / = 的替代。
{
case 1:
[calc work];
// 从这里引用出它的 work 方法,进入到 calcutor.m 函数中去 进行 -(void)work 的运算。然后得到一个返回值。下面是相同的道理。
calc.op='+';
self.resultLabel.text=[NSStringstringWithFormat:@"%.2f",calc.opValue1];
/// 这句话是将 操作符1 的值 赋值给 self.resultLabel.text
break;
// break 语句的意思是,跳出该循环
case 2:
[calc work];
calc.op='-';
self.resultLabel.text=[NSStringstringWithFormat:@"%.2f",calc.opValue1];
break;
case 3:
[calc work];
calc.op='x';
self.resultLabel.text=[NSStringstringWithFormat:@"%.2f",calc.opValue1];
break;
case 4:
[calc work];
calc.op='/';
self.resultLabel.text=[NSStringstringWithFormat:@"%.2f",calc.opValue1];
break;
case 5:
[calc work];
calc.op='=';
self.resultLabel.text=[NSStringstringWithFormat:@"%.2f",calc.opValue1];
default:
break;
}
}
--------------------------------------------------------
- (IBAction)equal:(UIButton *)sender {
float result=[calcwork];
// 通过你按的等号 ,进入 -(void)work;中求得返回值,作为结果复制到 float 型的 result 局部变量中
self.resultLabel.text=[NSStringstringWithFormat:@"%.2f",result];
// 作为结果肯定是要输出的 ,所以将这个值赋予 resultLabel 文本中去。
i=10;
calc.op='0';
calc.point='0';
float value=[sender.currentTitlefloatValue];
if(calc.point!='.')
{
calc.opValue2=calc.opValue2*10+value;
}
else
{
calc.opValue2=calc.opValue2+value/i;
i=i*10;
}
}
- (IBAction)clear:(UIButton *)sender {
i=10;
// 必须将 i 的值要重置到 10 因为下次运算的 i 值,经过上述的运算已经乘了好几个10了
calc.point='0';
calc.op='0';
calc.opValue1=0;
calc.opValue2=0;
self.resultLabel.text=[NSStringstringWithFormat:@"0"];
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
@implementation calcutor
-(float)work
{
if ( self.op=='+')
{
self.opValue1 +=self.opValue2;
/// 这样做的理由是能够进行多次运算。
self.opValue2=0;
// 在这里给操作符2赋一个0,接下来便可以连续运算,直接输入操作符2
return self.opValue1;
// 返回操作符1即返回一个结果
}
else if( self.op=='-')
{
self.opValue1 -=self.opValue2;
self.opValue2=0;
return self.opValue1;
}
else if(self.op=='x')
{
self.opValue1 *=self.opValue2;
self.opValue2=0;
return self.opValue1;
}
else if(self.op=='/')
{
self.opValue1 /=self.opValue2;
self.opValue2=0;
return self.opValue1;
}
return 0;
}
@end