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

2024-01-06 05:10

本文主要是介绍阿健的iOS开发Demo(加法计算器、图片浏览(动画)),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

</pre> 首先,我想声明我这里说的开发入门并不是指零基础开发入门,读者需有一定的IOS学习基础,初步了解面向对象编程思想。我写博客不是因为我是什么大牛,只是当做自己在iOS开发中的一个小工具,记录一下接触过的东西。希望读者在阅读时也可以指出不足,大家相互学习,共同进步。<p></p><p><span style="white-space:pre"></span>接下来进入正题,任何app的开发都是一个循序渐进的过程,都是很多小程序小功能一步步构成的。一个最基础的小程序,主要是由界面、业务逻辑和数据构成的。下图是我们开发中用得到的UI控件:</p><p><img src="https://img-blog.csdn.net/20151102232733746?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="520" height="180" align="middle" alt="" /></p><p>上图中红色表示常用,蓝色次之,黑色表示不常用,我们将对前两者加以学习。上面的控件可能不会顺序使用。</p><p><DEMO1>接下来我们来看第一个小demo,简易加法计算器:</p><p></p><pre name="code" class="objc">- (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];
}
我这里使用的是StoryBoard来作界面布局的,布局和运行效果如下图:

                         

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

我们在开发过程中所用到的UI控件都是继承自UIView,所以这些UI控件都拥有UIView的一些常见属性和方法:

@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值执行不同的代码即可。

transform属性也是一个经常用到的重要属性,给控件transform属性直接赋值:

CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx,  CGFloat ty) ;
CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);
CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)
这里angle是指弧度,并非角度。

给控件的transform属性叠加一个值:

CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty);
CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);
CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);
当我们想把控件transform属性复原到初始值时,用下方法即可:

view.transform = CGAffineTransformIdentity;
<DEMO2>接下来说一个图片按顺序播放的demo,当图片数量和播放间隔合适时就看起来是一个动画效果了

-(void)startAnimationWithImageCount:(NSInteger )count andPreOfImages:(NSString *)preStr {if (self.imageView.isAnimating) {  //判断图片是否处于播放状态中,是则返回return;}NSMutableArray *knockArray = [NSMutableArray array];  //用数组存放需要播放的图片for (int i = 0; i<count; i++) {NSString *str = [NSString stringWithFormat:@"%@_%02d",preStr,i];[knockArray addObject:[UIImage imageNamed:str]];}//下面是设置动画播放的图片、次数和间隔时间self.imageView.animationImages = knockArray;self.imageView.animationRepeatCount = 1;self.imageView.animationDuration = knockArray.count*0.06;[self.imageView startAnimating];//开始播放}

我这里用的是汤姆猫游戏中的图片,做的是点击按钮播放相应动画的一个效果,下图是点击牛奶按钮的一个效果截图:

   
这里我们需要的注意点是在数组中的图片名字需要有序,并且需要判断动画的执行状态,即开头if语句的效果,没有动画才会执行后面的代码
当图片名字是存放在一个plist文件中时,我们可以将图片数组设置为程序的一个属性,利用懒加载(将属性在get方法中初始化的方法)加载图片,属性中有数组或者字典时我们一般都会用懒加载初始化。

这里还有一个需要注意的问题:加载图片方法

(1)+ (UIImage*)imageNamed:(NSString*)name方法缺点是有缓存,内存会随着加载次数一直减少,优点是从第二次加载开始加载速度会变快,直接从缓存中读取

(2)+ (UIImage*)imageWithContentsOfFile:(NSString *)path和- (id)initWithContentsOfFile:(NSString*)path方法优点是不会做缓存,缺点是每次加载图片都会有延迟,是从文件路径中去读取图片

我们手机内存十分精贵,所以在实际开发中,我们常常使用后两者,同样也可以根据实际情况自由选择加载方法



这篇关于阿健的iOS开发Demo(加法计算器、图片浏览(动画))的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/575295

相关文章

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA