首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【iOS】基于Realm数据库的记账软件--记账模块(二)

【iOS】基于Realm数据库的记账软件--记账模块(二)

作者头像
MapleYe
发布于 2020-03-31 04:29:35
发布于 2020-03-31 04:29:35
1.1K00
代码可运行
举报
文章被收录于专栏:MapleYeMapleYe
运行总次数:0
代码可运行

1、记账界面搭建

从记账的需求出发,该界面需要用户输入以下账单信息: (1)账单金额 (2)账单类型 (3)相关账户 (4)账单产生的日期 (5)备注 那么,结合一下需求,开始构思一下界面如何搭建吧。

记账界面

其实这个界面不难搭建,一个控制器的scrollView添加包含两个控制器的视图(一个是收入,一个是支出)。子控制器分别用CollectView布局即可。这里就不详细说明了

2、数据准备

首先,我们来看看账单类型的模型声明。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// 账单类型模型
@interface MPCategoryModel : RLMObject

/// 类别ID
@property (nonatomic, copy)  NSString *cateID;
/// 类型名称
@property (nonatomic, copy) NSString *categoryName;
/// 类型图片名
@property (nonatomic, copy) NSString *categoryImageFileName;
/// 是否为收入类型
@property (nonatomic, assign) BOOL isIncome;
@end

RLM_ARRAY_TYPE(MPCategoryModel)

那么,对应地,我们在程序第一次启动时,从本地的plist文件读取数据,写入数据库。这样一来,我们就可以方便的从数据库进行查询了。因此在MPCategoryManager创建时,马上进行初始化操作,部分代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// MPCategoryManager.m文件
+ (instancetype)shareManager
{
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    instance = [[self alloc] init];
    [instance setup];
  });
  return instance;
}
/**
 初始化
 */
- (void)setup
{
  if([self isEmpty])
  {
    [self loadCategoryDataFromPlist];
  }
}

当数据写入完毕后,通过Realm Browser可以看到数据表如下

账单类别表

3、数据查询

以isIncome为查询条件,分别查询支出,收入类型类型列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 获得收入类型列表
 
 @return MPCategory模型数组
 */
- (RLMResults *)getIncomeCategoryList
{
  RLMResults *results = [MPCategoryModel objectsWhere:@"isIncome = YES"];
  return results;
}

得到以上数据后,即可进行展示了,具体展示就不详细说了。

/**
 获得支出类型列表
 
 @return MPCategory模型数组
 */
- (RLMResults *)getOutcomeCategoryList
{
  RLMResults *results = [MPCategoryModel objectsWhere:@"isIncome = NO"];
  return results;
}

4、选择动画效果

点击按钮后,会提取选中的图标颜色,然后从左到右进行“覆盖”,如下所示:

这里写图片描述

因此,我们的动画要分两步:

  • 提取颜色
  • 做"覆盖"动画

4.1、提取颜色

在这里使用了一个框架CCColorCube,通过该框架,我们可以方便的提取图标的颜色。提取方法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// 从图片提取颜色
- (UIColor *)extractColorFromImage:(UIImage *)image
{
  CCColorCube *cube = [[CCColorCube alloc] init];
  NSArray *colors = [cube extractColorsFromImage:image flags:CCAvoidBlack count:1];
  // 由于我们的图标都是单色的,因此直接取第一个元素即为我们所需要的颜色
  return colors.firstObject;
}

4.2、覆盖动画

通过shapeLayer的动画,一开始先添加宽为“1”的线条,再设置动画,将线条的lineWidth改为屏幕宽

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (void)animationWithBgColor:(UIColor *)color {
  CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"lineWidth"];
  animation.fromValue = @0.0;
  animation.toValue = @(self.bounds.size.width * 2);
  animation.duration = 0.3f;
  //* 设置填充色 */
  self.bgColorlayer.fillColor = color.CGColor;
  //* 设置边框色 */
  self.bgColorlayer.strokeColor = color.CGColor;
  
  self.previousColor = color;
  //* 保持动画 */
  animation.removedOnCompletion = NO;
  animation.fillMode = kCAFillModeForwards;
  
  [self.bgColorlayer addAnimation:animation forKey:@"bgColorAnimation"];
}

- (CAShapeLayer *)bgColorlayer
{
  if(_bgColorlayer == nil)
  {
    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:self.bounds.origin];
    [path addLineToPoint:CGPointMake(self.bounds.origin.x, self.bounds.size.height)];
    CAShapeLayer *layer = [CAShapeLayer layer];
    //* 设置路径 */
    layer.path = path.CGPath;
    //* 设置填充色 */
    layer.fillColor = [UIColor clearColor].CGColor;
    //* 设置边框色 */
    layer.strokeColor = [UIColor clearColor].CGColor;
    [self.layer insertSublayer:layer atIndex:0];
    self.bgColorlayer = layer;
  }
  return _bgColorlayer;
}

5、数字键盘

由于数字键盘设计到了“+-=.”等操作符,所以需要判定各情况的输入,来决定输入的内容。流程图如下所示:

这里写图片描述

具体判断的过程,看项目中的代码吧,判断起来有点繁琐。

6、小结

建议从记账模块入手,这一块完成后。记账软件的基本功能就完成了,剩下的只是对写入的数据,进行操作。所以这一模块是重中之重,有不明白的可以评论或者github上issue我~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
带动画渐进效果与颜色渐变的圆弧进度控件设计 原
     今天帮朋友写了一个小巧的圆弧进度控件,控件十分简单,主要设计思路采用CAShapeLayer来创建控件圆弧形状,使用CAGradientLayer来进行颜色渐变的渲染,两者结合来创建出颜色渐变的圆弧进度条控件,关于进度动画采用CoreAnimation动画处理。控件进行了简洁的封装,提供了面向使用的接口,需要的朋友可以自取,Demo地址如下:
珲少
2018/08/15
1.3K0
带动画渐进效果与颜色渐变的圆弧进度控件设计
                                                                            原
使用CAShapeLayer绘图
之前讲过使用UIBezierPath在UIView的drawRect中绘图, 今天我们讲下另外一种方式: CAShaperLayer
周希
2019/10/15
1.3K0
使用CAShapeLayer绘图
iOS CAShapeLayer和UIBezierPath的使用
1.CAShapeLayer简介 CAShapeLayer是一个通过矢量图形而不是bitmap来绘制的图层子类。 CAShapeLayer继承自CALayer,可以使用CALayer的所有属性值。 CAShapeLayer需要与 贝塞尔曲线 配合使用才有意义(这是个人经验)。 使用CAShapeLayer与贝塞尔曲线可以画出你想要的图形。 相对于Core Graphics绘制图片,使用CAShapeLayer有以下一些优点: 渲染快速。CAShapeLayer使用了硬件加速(使用CPU渲染),绘制同一
傅_hc
2018/07/04
2.1K0
绘图-圆环进度条实现详解
前言 实现了一款时下比较流行的环状进度动图,以下是源码解析 使用 Core Graphics 和 定时器 实现环形进度动图 圆环进度.gif 核心源码 # 使用 [self setNeedsDisp
進无尽
2018/09/12
2.3K0
绘图-圆环进度条实现详解
【iOS】基于Realm数据库的记账软件--Realm数据库(一)
</br> 以上,就是该项目的所有数据库表。实际项目会因业务需求,追加一些字段,但核心还是不变的。
MapleYe
2020/03/31
1.5K0
【iOS】基于Realm数据库的记账软件--Realm数据库(一)
【iOS】基于Realm数据库的记账软件--时间线模块(三)
接下来,我们将开始搭建时间线界面。该模块是界面展示中最大的难点--时间线布局。那么,我们先来看看效果图,因为gif上传后,动不了。所以在这里用几张截图和文字简单的描述一下,具体效果大家可下载项目自行查看~
MapleYe
2020/03/31
9540
【iOS】基于Realm数据库的记账软件--时间线模块(三)
iOS动画-CAAnimation使用详解
理解了隐式动画后,显式动画就更加通俗易懂了。区别于隐式动画的特点,显式动画就是需要我们明确指定类型、时间等参数来实现效果的动画。除此之外,我们也可以创建非线性动画,比如沿着任意一条曲线运动等; 我们平时最常用的也是显式动画,不仅系统为我们的视图提供了UIViewAnimationWithBlock的动画封装,而且我们在熟悉了Core Animation的动画属性后也可以很方便的设置显式动画;
梧雨北辰
2019/05/07
2.6K0
iOS动画-CAAnimation使用详解
iOS快速实现环形渐变进度条
进度条相信我们大家都不陌生,往往我们很多时候需要使用到圆形进度条。这篇文章给大家分享了利用ios如何快速实现环形进度条,下面来一起看看。
iOS程序应用
2022/11/10
1.7K0
iOS 画图对号
CGPoint pathCenter = CGPointMake(_logoView.frame.size.width/2, _logoView.frame.size.height/2 - 50);
星宇大前端
2019/01/15
1.1K0
老司机带你走进Core Animation 之图层的透视、渐变及复制
老司机的想法就是要把CoreAnimation头文件中的类大概都说一遍,毕竟一开始把系列名定成了《老司机带你走进CoreAnimation》(深切的觉得自己给自己坑了。。。)。
老司机Wicky
2018/08/22
8200
老司机带你走进Core Animation 之图层的透视、渐变及复制
Swift动画 —— 进度条
首先要做的就是用CAShapeLayer画一个圆。这里先创建一个路径,把圆的中心放在视图的中心,半径设为100,然后设置起始角度和结束角度,并将clockwise设为true。
CC老师
2022/01/14
2.9K0
Swift动画 —— 进度条
iOS Core Animation:Advanced Techniques
到目前为止,我们已经探讨过CALayer类了,同时我们也了解到了一些非常有用的绘图和动画功能。但是Core Animation图层不仅仅能作用于图片和颜色而已。本章就会学习其他的一些图层类,进一步扩展使用Core Animation绘图的能力。
conanma
2021/09/02
2K0
iOS动画三板斧(二)--CoreAnimation动画介绍使用附加
第二板斧就是用的最多的CoreAnimation动画库,简称是CA,所以动画类都是CA开头。所有的动画类都在 QuartzCore 库中,在iOS7之前使用需要#import <QuartzCore/QuartzCore.h>,iOS7之后系统已经将其自动导入了。CoreAnimation动画都是作用在layer上。 先来看下动画类的层级关系:
Haley_Wong
2018/08/22
1.3K0
iOS动画三板斧(二)--CoreAnimation动画介绍使用附加
[swift]读取svg图片为UIBezierPath,开心做动画
最近手痒又想整点动画玩玩,但是想了几个主意发现稍微复杂一点的手写都一定会累爆。这篇文章记录一下今天折腾的一个方案。说来简单,就是用矢量设计工具舒舒服服的做好设计,然后输出成 svg 格式,再用 NSXMLParser 去读出来,转换成 UIBezierPath ,然后就天高任鸟飞~
Alan Zhang
2018/10/19
1.7K0
[swift]读取svg图片为UIBezierPath,开心做动画
CAGradientLayer颜色渐变器
下面是我用上面的代码实现的最终效果,startPoint是(0,0),endPoint是(1,1)。
周希
2019/10/15
1.6K0
苹果安装动画制作
使用方法 使图层覆盖在应用图标上方,大小为app图标的bounds -(ICSectorProgressView *)sectorView { if (!_sectorView) { _sectorView = [[ICSectorProgressView alloc] initWithFrame:self.appImageView.bounds]; _sectorView.borderWidth = 20; // 默认为20 [_sectorVi
程序员不务正业
2018/06/14
1.3K0
iOS开发CoreAnimation解读之三——几种常用Layer的使用解析
        CAEmitterLayer是CoreAnimation框架中的粒子发射层,在以前的一片博客中有详细的介绍和范例,这里不再重复,地址如下:
珲少
2018/08/15
7520
iOS开发CoreAnimation解读之三——几种常用Layer的使用解析
学会不一样的Loading图
上述效果,其实很多app就单纯这样使用了,但是我们为了更美化,决定为其增加动态效果
Dwyane
2018/12/19
9780
学会不一样的Loading图
iOS Core Animation的用法
越上层,封装程度越高,动画实现越简洁越简单,但是自由度越低;反之亦然。本文着重介绍Core Animation层的基本动画实现方案。
码客说
2019/10/22
1.5K0
绘图-几种基本统计图的实现分析
在开发中我们会遇到各种统计图,或者各种绘图,本文通过对基本三大统计图:折线图、柱状图、扇形图的实现来掌握基本统计图的绘制,在下一篇文中会带来复杂一些的绘图案例分析,循序渐进达、触类旁通达到绘制各式各样图表的能力。
進无尽
2018/09/12
1.6K0
绘图-几种基本统计图的实现分析
相关推荐
带动画渐进效果与颜色渐变的圆弧进度控件设计 原
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档