题记:在开发的路途上,有的人走的很深很远,而对于停留在初级阶段的我来说,还要学的、经历的还有很多...

list

  • sqlite 数据库中,当把表里的数据都清空时,下次插入的数据的 id 主键不会从 0 开始。保险起见 下次从数据库获取数据时先获取第一个的 id 主键,不知道还有没有其他简单的方法
  • 如果设置了 tableView 的上边距再使用 MJRefresh时,刷新控件会错位,可使用忽略 tableView等的内边距方法,该方法在类:MJRefreshHeader 里,方法名 ignoredScrollViewContentInsetTop
  • 填写表单型的 tableView,用到了 textField 要注意需要显示的是 textField.text 还是 textField.placeholder,注意 cell 循环引用。 需要写多种类似的表格时,UI 界面就一套,用本地不同的 plist 数据去控制表格,给数据很多属性来区分:增加正则判断数值,增加样式...
  • kvc 修改已有类的私有属性是可以的,使用苹果未暴露的类的私有属性和方法是不允许的
  • 一个页面多次异步请求数据(使用 AFN),但需要在最后一次请求数据的时候才刷新 UI

    + 异步请求嵌套,在一次异步请求成功或失败的回调里进行下一次请求,适合于两次请求有明显的先后关系时

    + 用一个变量做标记,在每一次请求成功的回调里 需要写以下两个方面的代码:①将变量加个1,②如果变量等于请求的个数就执行请求完成、刷新UI的方法 ,当然请求失败也需要这样处理

    + 其他方法...?
  • 谓词 NSPredicate 的使用

    + ```objc

    NSArray *tmpArray = [self.zhiBiaoArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"month == '%@'", month]]];
      + ```objc
NSString *regex = @"^[0-9]*$";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self matches %@",regex];
return [predicate evaluateWithObject:text];
  • 根据数据中的对象的属性排序
    tmpArray = [tmpArray sortedArrayUsingComparator:^NSComparisonResult(SuiFangItem *obj1, SuiFangItem *obj2) {
return [obj1.SUBDATE compare:obj2.SUBDATE] == NSOrderedAscending;}];
  • 经典代码,标签 for 循环排序设置标签的 xy
 for (NSInteger i = 0; i < tagBtnArray.count; i ++) {
UIButton *tagBtn = tagBtnArray[i];
if (i == 0) {
tagBtn.fd_x = 0;
tagBtn.fd_y = 0;
} else {
UIButton *previousBtn = tagBtnArray[i -1];
tagBtn.fd_x = CGRectGetMaxX(previousBtn.frame) + 10;
tagBtn.fd_y = previousBtn.fd_y;
if ((tagViewW - tagBtn.fd_x) < tagBtn.fd_width) {tagBtn.fd_x = 0;
tagBtn.fd_y = CGRectGetMaxY(previousBtn.frame) + 10;
}
}
}
  • 解析 xml 值格式 的数据,xml 属性格式 的可使用系统的

    + 使用 XMLDictionary 将 xml 转成字典,再解析
  • 服务器返回一堆带有月份的数据,服务器并未做按月分组,本地实现按月分组
    // 获得数据中存在的月份,共有哪几个月份
NSMutableArray *monthArray = [NSMutableArray array];
ZhiBiaoItem *firstItem = self.zhiBiaoArray[0];
[monthArray addObject:firstItem.month]; for (NSInteger i = 1; i < self.zhiBiaoArray.count; i ++) {
ZhiBiaoItem *item = self.zhiBiaoArray[i];
if (![item.month isEqualToString:firstItem.month]) {
if ([monthArray containsObject:item.month]) {
continue;
}
[monthArray addObject:item.month];
}
} self.monthArray = monthArray; // 根据月份进行分组
NSMutableDictionary *resultDict = [NSMutableDictionary dictionary];
for (NSString *month in monthArray) {
NSArray *tmpArray = [self.zhiBiaoArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"month == '%@'", month]]];
[resultDict setObject:tmpArray forKey:month];
} self.resultDict = resultDict;
  • 使用 AFN 配置服务器自己创建的 https 证书的 https

    + 使用 AFN 忽略所有 https 证书、不检测域名的策略
        AFSecurityPolicy *secPolicy        = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
secPolicy.allowInvalidCertificates = YES;
secPolicy.validatesDomainName = NO;
_mgr.securityPolicy = secPolicy;
  + `配置 AFN 本地 https证书? 不清楚如何配置`
+
  • PNChart 修改 节点label 的大小,在源码中修改
- (CATextLayer *)createPointLabelFor:(CGFloat)grade pointCenter:(CGPoint)pointCenter width:(CGFloat)width withChartData:(PNLineChartData *)chartData {
CATextLayer *textLayer = [[CATextLayer alloc] init];
[textLayer setAlignmentMode:kCAAlignmentCenter];
[textLayer setForegroundColor:[chartData.pointLabelColor CGColor]];
[textLayer setBackgroundColor:[[[UIColor whiteColor] colorWithAlphaComponent:0.8] CGColor]];
[textLayer setCornerRadius:textLayer.fontSize / 8.0]; if (chartData.pointLabelFont != nil) {
[textLayer setFont:(__bridge CFTypeRef) (chartData.pointLabelFont)];
textLayer.fontSize = [chartData.pointLabelFont pointSize];
} CGFloat textHeight = textLayer.fontSize * 1.1;
CGFloat textWidth = width * 7;
CGFloat textStartPosY; }
  • PNChart 修改 x 轴 label 的位置,源码方法
- (void)setXLabels:(NSArray *)xLabels withWidth:(CGFloat)width  {
}
  • PNChart 修改 y 轴,源码方法
- (void)setYLabels {
PNChartLabel *minLabel = [[PNChartLabel alloc] initWithFrame:CGRectMake(0.0, (NSInteger) _chartCavanHeight - 10, (NSInteger) _chartMarginBottom, (NSInteger) _yLabelHeight)]; CGRect labelFrame = CGRectMake(0.0,
(NSInteger) (_chartCavanHeight + _chartMarginTop - index * yStepHeight) -10, }
  • PNChart 修改曲线 水平方向往后整体便移一点距离,源码方法
- (void)calculateChartPath:(NSMutableArray *)chartPath andPointsPath:(NSMutableArray *)pointsPath andPathKeyPoints:(NSMutableArray *)pathPoints andPathStartEndPoints:(NSMutableArray *)pointsOfPath {

int x = i * _xLabelWidth + _chartMarginLeft + _xLabelWidth / 2.0 + 6;

}

一个普通 iOS 码农的几个小项目相关知识点总结的更多相关文章

  1. Android码农如何一个星期转为iOS码农(不忽悠)

    WeTest 导读 作为一个android客户端开发,如果你不懂点ios开发,怎么好意思说自己是客户端开发呢,本文讲解如何让android开发码农在一个星期上手IOS开发 --<记录自己IOS开 ...

  2. 2020互联网寒冬之下,作为一个Android老码农,是如何进入腾讯的?

    由于众所周知的原因,原生Android开发如今已经日渐凋敝,作为一个Android程序员,不仅要会Java,Kotlin,JavaScript,Css,Html,还要会Flutter,C++,FFmp ...

  3. 一个年轻的码农的一个C#项目

    话不多少,今天要写一个小项目.我们写项目要做好准备.我们要做项目分析.要知道用户需求,然后在根据需求来规划自己的项目.我们要用自己所学,做最好的程序.尽自己所能完成项目需求.精简代码! 我们今天要写的 ...

  4. iOS Swift 熊猫🐼跑酷 第一个小项目

    前言:想用swift  写个小游戏 慢慢转化 能写出 ARKit来.但是又不能一口吃个胖子,慢慢来,在网络视频教程中撸了视频教学,断断续续看了半个多月,基本实现了 游戏主角

  5. 老码农教你在 StackOverflow 上谈笑风生

    作为一个高大上的码农,你肯定用到过 StackOverflow,必须的.会有人否定这个断言么?那他恐怕不是真正的码农,或者说还没入门.StackOverflow 对于码农的重要性,基本就和诸葛亮对刘备 ...

  6. WPF开发中Designer和码农之间的合作

    想要用WPF做出一流的软件界面, 必须要Designer和码农通力合作.理想的情况是平时并行开发,Designer用Expression套件(包括Design和Blend)来设计界面,码农开发Mode ...

  7. .net 码农转战 iOS - 初探

    好久没写博客了,之前还打算把毕业设计中涉及到的两个算法拿出来说说(脸型分析 + 声音分析),博文都写了一半了,后来实在太忙了,那篇随笔也就沉在草稿列表中没动过. 我原先是专职 .net 开发的,在公司 ...

  8. 二维码合成,将苹果和安卓(ios和android)合成一个二维码,让用户扫描一个二维码就可以分别下载苹果和安卓的应用

    因为公司推广的原因,没有合适的将苹果和安卓(ios和android)合成一个二维码的工具. 因为这个不难,主要是根据浏览器的UA进行判断,所以就自己开发了一个网站 网站名称叫:好推二维码  https ...

  9. 一个二维码如何自动识别是安卓(Android)还是苹果(IOS)

    思考问题: 通常,我们开发一个APP,有Android版本.IOS版本. 但是只有一个二维码?怎么办呢? 怎么让IOS用户扫描二维码下载IOS版本,Android用户扫描二维码下载到Android版本 ...

随机推荐

  1. Vue实现添加、删除、关键字查询

    从今天开始,将不定期更新关于 Vue 的学习以及各种方法的使用,好了,下面就开始吧 Vue的实例创建首先需要我们引入一个vue.js(也可以在本地npm安装vue,我为了省事就...),然后在HTML ...

  2. 数据库路由中间件MyCat - 源代码篇(16)

    此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 5. 路由模块 真正取得RouteResultset的步骤:AbstractRouteStrategy的ro ...

  3. Deep Image Matting

    论文地址:https://arxiv.org/abs/1703.03872 TF复现地址:https://github.com/Joker316701882/Deep-Image-Matting 领域 ...

  4. Unity 2018中的图形渲染

    https://mp.weixin.qq.com/s?__biz=MzU5MjQ1NTEwOA==&mid=2247490249&idx=1&sn=d86083e33d9884 ...

  5. 2017-10-4 清北刷题冲刺班p.m

    P102zhx a [问题描述]你是能看到第一题的 friends 呢.——hja两种操作:1.加入一个数.2.询问有多少个数是?的倍数.[输入格式]第一行一个整数?,代表操作数量.接下来?行,每行两 ...

  6. Spring是一个分层的Java

    Spring简介 Spring是一个分层的Java SE/EE应用一站式的轻量级开源框架.Spring核心是IOC和AOP. Spring优点 -方便解耦,简化开发,通过Spring提供的IoC容器, ...

  7. Discuz!快速对接个人支付插件

    ## Discuz!快速对接个人支付插件 由于近期准备使用老牌论坛程序Discuz建立一个交流社区分享一些资源,但是测试了各种支付方式都不满意,偶然发现一个简直不要太完美的解决方案.今天抽时间搭建好并 ...

  8. 分层图最短路【bzoj2662】[BeiJing wc2012]冻结

    分层图最短路[bzoj2662][BeiJing wc2012]冻结 Description "我要成为魔法少女!" "那么,以灵魂为代价,你希望得到什么?" ...

  9. 线程池、Lambda表达式

    线程池.Lambda表达式 线程池.Lambda表达式 线程池.Lambda表达式 线程池.Lambda表达式 线程池.Lambda表达式 线程池.Lambda表达式 线程池.Lambda表达式 (正 ...

  10. 黑马SSM项目练习中的Oracle操作