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

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. 【C#】VS2017 winform 打包

    首先要在想要打包的项目下创建一个新的项目, 创建好setup项目,之后点击属性,去修改打包软件的名字,ProductName....可以选填 到此已经创建好了setup工程了,那么下面开始将要打包的d ...

  2. [Xcode 实际操作]四、常用控件-(15)MKMapView加载简单视图

    目录:[Swift]Xcode实际操作 本文将演示地图视图的使用方法. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首先往视图控制 ...

  3. css 实现三级联动菜单

    昨天因为项目中想要把二级联动菜单改成三级联动菜单,所以我就单独写了一个tab导航栏,用纯css的方式实现的三级联动.一开始我想着可以用js实现,但是js的hover事件和mouseenter,mous ...

  4. 自定义进度条PictureProgressBar——从开发到开源发布全过程

    自定义进度条PictureProgressBar——从开发到开源发布全过程 出处: 炎之铠邮箱:yanzhikai_yjk@qq.com 本文原创,转载请注明本出处! 本项目JCenter地址:htt ...

  5. click点击事件先后顺序的问题

    //页面加载时,每秒钟调用一次var times = setInterval("loadFlws()","1000"); function loadFlws() ...

  6. Windows 在目录中搜索哪个文件中有指定字符串

    findstr /s /i "string" *.* 表示,当前目录以及子目录下的所有文件中查找"string"这个字符串. *.*表示所有类型的文件. /s ...

  7. 记录一下今天犯得错误,public static function init()写成了public function initialize()

    tp5模型事件是放在函数 public static function init() 而我写成了初始化函数,编辑器生成的 public function initialize() 开始时用着没出问题, ...

  8. IPv6邻居发现协议

    IPv6邻居发现协议 邻居发现协议NDP 邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议.邻居发现协议替代了IPv4的ARP(Add ...

  9. jQuery Plugin Poshy Tip 使用 统一提示信息

    项目到了后期,发现前端的提示信息不统一,解决思路如下: 1.回顾系统中tip出现的场景:表单验证提示信息.数据列表中随填随显 2.确定问题域:多条提示信息层叠.信息显示风格不统一 3.结论:找出一款合 ...

  10. Codeforces Round #375 (Div. 2) Polycarp at the Radio 优先队列模拟题 + 贪心

    http://codeforces.com/contest/723/problem/C 题目是给出一个序列 a[i]表示第i个歌曲是第a[i]个人演唱,现在选出前m个人,记b[j]表示第j个人演唱歌曲 ...