加法计算器、图片浏览(动画 阿健的iOS开发Demo)


首先,我想声明我这里说的开发入门并不是指零基础开发入门 , 读者需有一定的IOS学习基?。醪搅私饷嫦蚨韵蟊喑趟枷?。我写博客不是因为我是什么大牛 , 只是当做自己在iOS开发中的一个小工具,记录一下接触过的东西 。希望读者在阅读时也可以指出不足,大家相互学习,共同进步 。
接下来进入正题,任何app的开发都是一个循序渐进的过程,都是很多小程序小功能一步步构成的 。一个最基础的小程序,主要是由界面、业务逻辑和数据构成的 。下图是我们开发中用得到的UI控件:

加法计算器、图片浏览(动画  阿健的iOS开发Demo)

文章插图
上图中红色表示常用,蓝色次之,黑色表示不常用,我们将对前两者加以学习 。上面的控件可能不会顺序使用 。
接下来我们来看第一个小demo,简易加法计算器:
- (IBAction)resignButton:(id)sender {self.firstNum.text = [NSString stringWithFormat:@""];self.secondNum.text = [NSString stringWithFormat:@""];self.result.text = [NSString stringWithFormat:@"%d",0];self.noticeText.text = [NSString stringWithFormat:@""];[self.view endEditing:YES];//清空收回键盘}- (IBAction)caculatorButton:(id)sender {if (self.firstNum.text.length == 0|| self.secondNum.text.length == 0) {_noticeText.text = @"请输入两个数";_noticeText.textColor = [UIColor redColor];//设置字体颜色return ;}int num1 = [self.firstNum.text intValue];int num2 = [self.secondNum.text intValue];self.noticeText.text = @"";self.result.text = [NSString stringWithFormat:@"%d",num1+num2];}

我这里使用的是来作界面布局的,布局和运行效果如下图:
加法计算器、图片浏览(动画  阿健的iOS开发Demo)

文章插图

加法计算器、图片浏览(动画  阿健的iOS开发Demo)

文章插图
这里实现了一个简易加法计算器逻辑和界面呈现,:是“计算”的点击方法 , 进入方法内部首先判断两个是否都有输入,若不是都有输入,下方的显示红色提示,程序返回 。:对应“清空”的点击事件,给两个重新赋值为空 。这个demo是给初学者了解程序开发初级流程的,没有什么难度 。
加法计算器、图片浏览(动画  阿健的iOS开发Demo)

文章插图
我们在开发过程中所用到的UI控件都是继承自,所以这些UI控件都拥有的一些常见属性和方法:
@property(nonatomic,readonly) UIView *superview;//获得父控件对象@property(nonatomic,readonly,copy)NSArray *subviews;//获得自己所有子控件对象@property(nonatomic)NSInteger tag;//控件ID\标识,父控件可以通过tag值找到相应子控件@property(nonatomic)CGAffineTransform transfom;//控件的形变属性(可设置旋转角度、比例缩放、平移等属性)@property(nonatomic)CGRect frame;//控件所在矩形框在父控件中的位置和尺寸@property(nonatomic)CGRect bounds;//控件在矩形框中的位置和尺寸,x、y一般为0@property(nonatomic)CGPoint center;//控件中心点的位置
- (void)addSubview:(UIView *)view;//添加一个子控件view- (void)removeFromSuperview;//从父控件中移除- (UIView *)viewWithTag:(NSInteger)tag;//根据一个tag标识找出对应的控件(一般都是子控件)
通过这些公共属性或者方法我们可以修改控件的状态,例如位置、颜色、大小等 。
给相同控件设置不同tag值,这样就不用在写方法的时候分别给每个控件都写一个方法,只需在一个方法中根据不同的tag值执行不同的代码即可 。
属性也是一个经常用到的重要属性,给控件属性直接赋值:
CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx,CGFloat ty) ;CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)
这里angle是指弧度 , 并非角度 。
给控件的属性叠加一个值:
CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty);CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);
【加法计算器、图片浏览(动画阿健的iOS开发Demo)】当我们想把控件属性复原到初始值时,用下方法即可:
view.transform = CGAffineTransformIdentity;
接下来说一个图片按顺序播放的demo,当图片数量和播放间隔合适时就看起来是一个动画效果了
-(void)startAnimationWithImageCount:(NSInteger )count andPreOfImages:(NSString *)preStr {if (self.imageView.isAnimating) {//判断图片是否处于播放状态中 , 是则返回return;}NSMutableArray *knockArray = [NSMutableArray array];//用数组存放需要播放的图片for (int i = 0; i
我这里用的是汤姆猫游戏中的图片,做的是点击按钮播放相应动画的一个效果,下图是点击牛奶按钮的一个效果截图:
加法计算器、图片浏览(动画  阿健的iOS开发Demo)

文章插图
这里我们需要的注意点是在数组中的图片名字需要有序,并且需要判断动画的执行状态 , 即开头if语句的效果,没有动画才会执行后面的代码
当图片名字是存放在一个plist文件中时,我们可以将图片数组设置为程序的一个属性,利用懒加载(将属性在get方法中初始化的方法)加载图片 , 属性中有数组或者字典时我们一般都会用懒加载初始化 。
这里还有一个需要注意的问题:加载图片方法
(1)+ (*):(*)name方法缺点是有缓存,内存会随着加载次数一直减少,优点是从第二次加载开始加载速度会变快,直接从缓存中读取
(2)+ (*)ile:( *)path和- (id)le:(*)path方法优点是不会做缓存,缺点是每次加载图片都会有延迟 , 是从文件路径中去读取图片
我们手机内存十分精贵,所以在实际开发中,我们常常使用后两者 , 同样也可以根据实际情况自由选择加载方法