Git Product home page Git Product logo

book-recommended-daily's Introduction

每日优秀文章推荐

⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️

作者会每天推荐一篇优秀文章给大家

每天会不定时更新,以下文章均是平时累计 转载请联系文章原作者。

麻烦给小编一颗🌟,让小编更有动力总结出更多优秀文章和作品。

⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️

标签:

【==规范==】【==定义==】【==语法==】


【==基础知识==】【==基础控件==】


【==小常识==】【==时间==】【==颜色==】【==二维码==】【==地图==】【==网络==】【==相册==】【==定时器==】【==推送==】


【==动画==】【==性能==】【==多线程==】【==安全==】【==算法==】【==视频==】【==绘制==】 【==支付==】【==逆向==】


【==框架==】【==三方框架==】


【==开发模式==】【==混编==】【==开发==】【==版本管理==】


【==审核==】 【==推广==】





2019/05/07

在项目实战当中遇到的问题

  • flutter环境搭建mac版点击前往【==开发模式==】

    1.系统环境要求 2.下载flutter 3.配置环境变量 4.检查环境 5.搭建环境常见问题整理

  • flutter APP 编译运行时报 package androidx && AAPT 、AAPT2 && parsing resources点击前往【==开发模式==】

    This version of image_picker will break your Android build if it or its dependencies aren't compatible with Android

  • flutter错误解决--Error running Gradle 错误点击前往【==开发模式==】

    在Debug项目的时候, 出现 Error running Gradle:一般是因为不能翻墙的原因

  • Flutter已有项目导入,没法启动Android模拟器的解决方法(iOS模拟器可以启动)点击前往【==开发模式==】

  • Flutter打包IPA报错Could not find an option named "track-widget-creation".点击前往【==开发模式==】

    在Xcode上进行archive之前先在终端运行以下命令行: 进入项目目录 $flutter build ios --release




2019/05/06

  • Firebase 初步使用教程点击前往【==三方框架==】

  • Firebase 教程 —— 一个实时聊天室 点击前往【==三方框架==】

    Firebase是一家实时后端数据库创业公司,它能帮助开发者很快的写出Web端和移动端的应用。自2014年10月Google收购Firebase以来,用户可以在更方便地使用Firebase的同时,结合Google的云服务。

    Firebase能让你的App从零到一。也就是说它可以帮助手机以及网页应用的开发者轻松构建App。通过Firebase背后负载的框架就可以简单地开发一个App,无需服务器以及基础设施。

  • Mac下配置全局gradlew命令 点击前往【==小常识==】




2019/04/28

  • iOS Enabled 和 UserInteractionEnabled 的区别点击前往【==小常识==】

  • iOS 录音、音频的拼接剪切以及边录边压缩转码点击前往【==视频==】

    总体内容 1、录音实现 2、录音的编辑 (拼接音频:可以设置多段,音频的剪切:按照时间段剪切) 3、lame静态库进行压缩转码

  • 如何用好 github 中的 watch、star、fork点击前往【==小常识==】

  • 自从升级到Xcode 10.2后,我无法再通过cli运行react-native run-ios点击前往【==小常识==】

    此问题这两天一直困扰着我,请问有没有高手知道如何具体处理,按照此文章思路暂时未解决




2019/04/19

  • Xcode9 Swift4下编译Swift第三方框架时报错Swift compiler Error的解决方案点击前往【==小常识==】

  • iOS Xcode自定义代码块以及迁移点击前往【==小常识==】

  • RunLoop实战:实时卡顿监控点击前往【==性能==】




2019/03/29

  • iOS开发常用框架总览!点击前往【==基础知识==】

  • Carthage 包管理工具点击前往【==基础知识==】

  • iOS--关于时间格式“ISO 8601”标准转换问题:“2017-09-30T09:00:00”点击前往【==小常识==】

  • iOS中解析ISO 8601格式的时间点击前往【==小常识==】

  • iOS WKWebView与JS交互 点击前往【==基础控件==】




2019/03/29

  • Flutter 完整开发实战详解(一、Dart 语言和 Flutter 基础)点击前往【==开发模式==】

  • Flutter 完整开发实战详解(二、快速实战篇)点击前往【==开发模式==】

  • Flutter 完整开发实战详解(三、打包填坑篇)点击前往【==开发模式==】

  • Flutter 完整开发实战详解(四、Redux、主题、国际化)点击前往【==开发模式==】

  • Flutter 完整开发实战详解(五、深入探索)点击前往【==开发模式==】

  • Flutter 完整开发实战详解(六、 深入Widget原理)点击前往【==开发模式==】

  • Flutter 完整开发实战详解(七、 深入布局原理)点击前往【==开发模式==】

  • Flutter完整开发实战详解(八、 实用技巧与填坑)点击前往【==开发模式==】

  • Flutter完整开发实战详解(九、 深入绘制原理)点击前往【==开发模式==】

  • Flutter完整开发实战详解(十、 深入图片加载流程)点击前往【==开发模式==】




2019/03/27




2019/03/26




2019/03/25

Pusher Channels provides realtime communication between servers, apps and devices. Pusher Channels is used for notifications, chat, gaming, web-page updates, IoT, and many other systems requiring realtime communication.

When something happens in your system, it can update web-pages, apps and devices. When an event happens on an app, the app can notify all other apps and your system. For example, If the price of Bitcoin changes, your system could update the display of all open apps and web-pages. Or if Bob starts typing a message, his app could tell Alice’s app to display “Bob is typing …”.

Pusher Channels has libraries for everything: web browsers, iOS and Android apps, PHP frameworks, cloud functions, bash scripts, IoT devices. Pusher Channels works everywhere because it uses WebSockets and HTTP, and provides fallbacks for devices that don’t support WebSockets.




2019/03/22

  • Flutter学习之入门和体验点击前往【==开发模式==】

  • Flutter学习之Dart语法特性点击前往【==开发模式==】

  • Flutter学习之认知基础组件点击前往【==开发模式==】

  • Flutter学习之布局、交互、动画点击前往【==开发模式==】

  • Flutter学习之事件循环机制、数据库、网络请求点击前往【==开发模式==】




2019/03/11

  • Flutter 即学即用系列博客——04 Flutter UI 初窥点击前往【==开发模式==】

  • Dart vs Swift点击前往【==开发模式==】

  • Flutter开发之Dart语法基础点击前往【==开发模式==】

  • Flutter开发之Dart的数据类型01点击前往【==开发模式==】

  • Flutter开发之Dart的数据类型02点击前往【==开发模式==】




2019/03/01

  • Why flutter, how to flutter?点击前往【==开发模式==】

  • flutter基础-看完这篇就可以撸app了点击前往【==开发模式==】

  • Flutter知乎App实践:UI+Json+Utils点击前往【==开发模式==】

  • Flutter调试技巧总结——高效开发的秘密点击前往【==开发模式==】




2019/02/28

  • Flutter中文网点击前往【==开发模式==】

  • React Native中文网点击前往【==开发模式==】

  • flutter的一个强大的特性就是其炫酷霸气的UI库,官方传送门 Material-UI库点击前往【==开发模式==】




2019/02/27

  • 从零讲解 iOS 中 OpenGL ES 的纹理渲染点击前往【==绘制==】

  • iOS原生级别后台下载详解点击前往【==网络==】

  • TikTok(抖音国际版)逆向,全球的小姐姐们,我来啦!点击前往【==逆向==】

    • iOS逆向工程指的是软件层面上进行逆向分析的过程。 在一般的软件开发流程中,都是过程导向结果。在逆向中,你首先拿到的是结果,然后是去分析实现这个结果的过程。理清过程之后,才开始进行逆向的代码编写,在整个流程中,分析过程的占比是90%,代码书写的过程只占10%。所以本篇更多的讲的是一个思路,代码其实很日常



2019/02/21

 1、找不到方法的实现unrecognized selector sent to instance
找不到方法的实现unrecognized selector sent to instance
 2、KVC造成的crash
 3、EXC_BAD_ACCESS
 4、KVO引起的崩溃
 5、集合类相关崩溃
 6、多线程中的崩溃
 7、Socket长连接,进入后台没有关闭
 8、Watch Dog超时造成的crash
 9、后台返回NSNull导致的崩溃,多见于Java做后台服务器开发语言
  • AppDelegate的模块化+瘦身点击前往【==小常识==】

  • 关于Socket,看我这几篇就够了(三)原来你是这样的Websocket点击前往【==基础知识==】

  • iOS国际化(多语言)漫谈点击前往【==基础知识==】




2019/02/20

  • 丧心病狂的Github技巧点击前往【==基础知识==】

  • Flutter试用报告点击前往【==开发模式==】

  • 来一次有侧重点的区分Swift与Objective-C点击前往【==基础知识==】




2019/02/19

  • 搞iOS的,面试官问Hash干嘛?原因远比我下面要介绍的多点击前往【==基础知识==】

  • [译] 用这些 iOS 技巧让你的 APP 性能更佳点击前往【==小常识==】

    • 简要概括: 良好的性能对于提供良好的用户体验至关重要,iOS 用户通常对其应用程序抱有很高的期望。缓慢且无响应的应用可能会让用户放弃使用你的应用,或者更糟糕的是,对应用留下差评。 虽然现代 iOS 硬件功能十分强大,足以处理许多密集和复杂的任务,但是如果你不关心你的 APP 是怎么执行的话,用户的设备仍会出现无响应的情况。在本文中,我们将研究五种优化技巧,使你的 APP 更流畅。
  • iOS 本地图片优化实践点击前往【==小常识==】

    • 删除无用图片、去重复、压缩、分析、网络下载、Xcode 配置



2019/02/18

  • 怎么让self.view的Y从navigationBar下面开始计算点击前往【==小常识==】

  • iOS 开发工具 - Swift VS Objective-C点击前往【==混编==】

  • iOS 了解Xcode Bitcode点击前往【==小常识==】




2019/01/26




2019/01/22




2019/01/21

  • ios开发——解决UICollectionView的cell间距与设置不符问题点击前往【==小常识==】

  • UICollectionView中Cell左对齐 居中 右对齐 等间距------你想要的,这里都有点击前往【==小常识==】

  • 使用水平和垂直滑动的UICollectionView来制作粘性的行和列点击前往【==小常识==】




2019/01/17

  • UICollectionViewCell「居左显示」点击前往【==小常识==】

  • ios 设置导航器navigationItem.titleView无效问题记录点击前往【==小常识==】

    只有在push进导航器的vc或者是作为导航器 rootViewController的vc才能够修改titleView.由于tabbar继承于UIViewController,且为导航器的rootViewController,所以如果要修改titleView只能够在tabbarView中去实现,在tabbar里面的vc去设置是不会出现效果的.

  • iOS12远程推送新特性点击前往【==推送==】

新特性 Grouped notifications 推送分组 Provisional authorization 临时授权 Notification management 推送消息的管理 Critical alerts 警告性质的推送 Notification content extensions 推送内容扩展中的可交互和动态更改Action

  • iOS 链式编程一行代码完成屏幕适配点击前往【==小常识==】



2019/01/16

  • iOS后台模式开发指南点击前往【==小常识==】

    每一次iOS的发布都会在后台操作和细节上的放宽限制,以此提升用户体验和延长电池寿命.对于在iOS中实现”真正”的多任务来说,后台模式不是一个神奇的解决办法.当用户切换到其他的APP应用时,大多数的APP应用仍然会完全的暂停运行.你的应用只被允许在很特殊的情况下才能在后台中继续运行.例如,这些包括播放音频,获取位置更新,或者从服务器获取最新内容的情况.

  • warning: templates not found /usr/local/git/share/git-core/templates点击前往【==小常识==】

  • CAEmitterLayer 粒子动画点击前往【==动画==】

  • iOS 按时间给 model 数组排序点击前往【==小常识==】

  • Flutter实战详解--高仿好奇心日报点击前往【==开发模式==】




2019/01/11

  • iOS马甲包混淆必过4.3审核上线解决方案点击前往【==审核==】

  • 苹果又被拒了:Guideline 4.3 - Design点击前往【==审核==】

  • iOS4.3马甲包审核被拒和解决方法、点击前往【==审核==】

  • Guideline 4.2.2 - Design - Minimum Functionality 被拒及解决方法点击前往【==审核==】




2019/01/10

  • 高德地图绘制面官方文档点击前往【==地图==】

  • 热力图 热图 地图 图层覆盖物(dingsoung的代码)点击前往【==地图==】

  • iOS 原生地图MKMapView上添加图片遮盖物点击前往【==地图==】

  • 地图:MapKit的简单使用——MKOverlay点击前往【==地图==】

  • MKMapView 位置与地图(三)给地图添加覆盖层点击前往【==地图==】




2019/01/09

  • CocoaPods 都做了什么?点击前往【==小常识==】

  • 使用 Metal 和 Core ML 评价照片质量点击前往【==框架==】




2019/01/08

  • 😊GitHub可免费创建无限量私人储存库

  • git lfs

Git LFS(Large File Storage, 大文件存储)是可以把音乐、图片、视频等指定的任意文件存在 Git 仓库之外,而在 Git 仓库中用一个占用空间 1KB 不到的文本指针来代替的小工具。通过把大文件存储在 Git 仓库之外,可以减小 Git 仓库本身的体积,使克隆 Git 仓库的速度加快,也使得 Git 不会因为仓库中充满大文件而损失性能。

  • 处理 github 不允许上传超过 100MB 文件的问题点击前往【==小常识==】

  • 上传超过100M的文件到github点击前往【==小常识==】

2019/01/07

  • 获取网络图片的大小点击前往【==小常识==】

  • 网络请求优化之取消请求点击前往【==网络==】 页面返回的时候,将网络请求取消 同一个请求多次请求时,短时间忽略相同的请求 同一个请求多次请求时,取消之前发出的请求 发送的请求,多次尝试并确保成功

  • 初级程序员需要知道的基本代码规范点击前往【==规范==】




2019/01/03

  • Apple TV 编程指南--介绍点击前往【==框架==】

    tv OS 开发由 iOS 开发衍生而来但又有所不同,包括 tv OS 特有的一些框架。你会发现 Apple TV 的开发跟 iOS 开发很相似,它结合了支持分享技术、多用户体验,并且开辟了你在 iOS 设备上没有发现的app开发领域的空间。你可以创建新的APP也可以使用 iOS 代码作为起点。无论是哪种开发,你使用的都是熟悉的工具(Xcode)、语言(Objective-C,Swift以及JavaScript)。

  • TVOS tips点击前往【==框架==】

  • tvOS 开发第一个tvOS应用点击前往【==框架==】

  • 苹果电视 tvOS UI设计规范总结 (五)图标和图像点击前往【==框架==】

  • iOS仿滴滴预约用车时间选择器点击前往【==时间==】




2019/01/02

  • Charts的github

  • iOS使用Charts框架绘制—柱形图点击前往【==三方框架==】

  • iOS BarChartView的使用,Charts版本3.2.1点击前往【==三方框架==】

  • 学会使用Objective-C中的block点击前往【==基础知识==】

    Apple从OS X 10.4和iOS 4以后开始支持block,相对于delegate,block有很多便捷之处,使得代码更简洁,可读性更强。但是如果使用不当,则会造成很多问题。本文结合自己的经验和《Pro Multithreading and Memory Management for iOS and OS X: with ARC, Grand Central Dispatch, and Blocks》书中的知识点,介绍block的相关知识点。




2019/01/01

  • iOS 基于PhotoKit框架的自定义相册点击前往【==相册==】

    之前公司的项目需要自定义相册,并且需要获取图片的经纬度信息,使用UIImagePickerController自然是实现不了的。所以就用到了我们今天所说的PhotoKit框架,因为PhotoKit是iOS8之后出的,所以iOS8以前的项目是不能使用的(可以使用AssetsLibrary,这里就不多介绍了)。

  • UITableView性能优化-中级篇点击前往【==性能==】

    最近遇到一个需求,对tableView有中级优化需求 要求 tableView 滚动的时候,滚动到哪行,哪行的图片才加载并显示,滚动过程中图片不加载显示; 页面跳转的时候,取消当前页面的图片加载请求;

  • 新手也看得懂的 iOS Runtime 教程点击前往【==基础知识==】

    在 C 语言中,将代码转换为可执行程序,一般要经历三个步骤,即编译、链接、运行。在链接的时候,对象的类型、方法的实现就已经确定好了。 而在 Objective-C 中,却将一些在编译和链接过程中的工作,放到了运行阶段。也就是说,就算是一个编译好的 .ipa 包,在程序没运行的时候,也不知道调用一个方法会发生什么。这也为后来大行其道的「热修复」提供了可能。因此我们称 Objective-C 为一门动态语言。 这样的设计使 Objective-C 变得灵活,甚至可以让我们在程序运行的时候,去动态修改一个方法的实现。而实现这一切的基础就是 Runtime 。 简单来说, Runtime 是一个库,这个库使我们可以在程序运行时创建对象、检查对象,修改类和对象的方法。




2018/12/27

  • 最火移动端跨平台方案盘点:React Native、weex、Flutter点击前往【==开发模式==】

    1)react native、weex均使用JavaScript作为编程语言,目前JavaScript在跨平台开发中,可谓占据半壁江山,大有“一统天下”的趋势;

    2)kotlin-native开始支持 iOS 和 Web 开发,(kotlin已经成为android的一级语言)也想尝试“一统天下”;

    3)flutter是Google跨平台移动UI框架,Dart作为谷歌的亲儿子,毫无疑问Dart成为flutter的编程语言。作为巨头新生儿,在flutter官网也可以看出,flutter同样“心怀天下”(可支持Web端、Android端、iOS端等)。

  • Apple Pay--iOS开发 点击前往【==支付==】 Apple Pay,简单来说, 就是一种移动支付方式。通过Touch ID/ Passcode,用户可使用存储在iPhone 6, 6p等设备上的信用卡和借记卡支付证书来授权支付; 它是苹果公司在2014苹果秋季新品发布会上发布的一种基于NFC的手机支付功能,于2014年10月20日在美国正式上线,2016年2月18日凌晨5:00, Apple Pay 业务在**上线。

  • iOS 使用模拟器模拟定位 点击前往【==小常识==】




2018/12/25




2018/12/24

是一家提供让个人或公司在互联网上接受付款服务的科技公司。Stripe提供在网上接受付款所需的技术、避免信用卡诈骗技术及银行基础设施

  • Stripe 官方集成文档点击前往【==支付==】

  • Stripe使用指南:Swift开发中的信用卡支付点击前往【==支付==】

  • iOS oc版Stripe支付点击前往【==支付==】




2018/12/21




2018/12/19

  • ios lable中电话号码点击拨打电话 点击前往【==小常识==】
#pragma mark-<获取电话号码的坐标>
+ (CGRect)boundingRectForCharacterRange:(NSRange)range andLable:(UILabel *)lable lableSize:(CGSize)lableSize{
//    NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:contentStr];
//    NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init];
//    paraStyle.lineSpacing = 6;
//    NSDictionary *attrs =@{NSFontAttributeName : [UIFont systemFontOfSize:12.0], NSParagraphStyleAttributeName : paraStyle};
//    [attributeString setAttributes:attrs range:NSMakeRange(0, contentStr.length)];
    
    NSTextStorage *textStorage = [[NSTextStorage alloc] initWithAttributedString:lable.attributedText];
    NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
    [textStorage addLayoutManager:layoutManager];
    NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:lableSize];
    textContainer.lineFragmentPadding = 0;
    [layoutManager addTextContainer:textContainer];
    
    NSRange glyphRange;
    
    [layoutManager characterRangeForGlyphRange:range actualGlyphRange:&glyphRange];
    
    CGRect rect = [layoutManager boundingRectForGlyphRange:glyphRange inTextContainer:textContainer];
//    CGFloat yOfset =  rect.origin.y;
//    rect.origin.y = yOfset + 3;
    
    return rect;
}
  • iOS 识别文字中的手机号码高亮显示点击可拨打电话 点击前往【==小常识==】



2018/12/18

  • ios文字转语音后台(转,待验证)点击前往【==框架==】

  • iOS端使用replaykit录制屏幕的技术细节点击前往【==框架==】

  • UIBezierPath绘制柱状图、折线图和饼状图点击前往【==绘制==】




2018/12/17




2018/12/12

  • iOS开发编码建议与编程经验点击前往【==小常识==】

    在开发过程中,我们不仅要去看别人的代码,也要让别人看我们的代码。那么,有一个良好的编码习惯将会非常重要。下面将会罗列使用Objective-C来开发iOS的编码建议。

  • iOS应用间跳转点击前往【==小常识==】

  • iOS通讯录介绍和使用点击前往【==小常识==】

通讯录的介绍

通讯录的使用




2018/12/11

  • ios新特性:自动填充用户名密码UIRemoteKeyboardWindow点击前往【==小常识==】

  • swift -- 系统自带分享功能点击前往【==小常识==】

        let imageToShare = UIImage.init(named: "img_01")
        let urlToShare = NSURL.init(string: "http://www.baidu.com")
        let items = [textToShare,imageToShare ?? "WeShare",urlToShare ?? "WeShare"] as [Any]
        let activityVC = UIActivityViewController(
            activityItems: items,
            applicationActivities: nil)
       activityVC.completionWithItemsHandler =  { activity, success, items, error in 
       }
        self.present(activityVC, animated: true, completion: { () -> Void in
        })
        ```
    
    
    
    




2018/12/10

  • iOS-收集的不常用却实用的小方法和技巧点击前往【==小常识==】

    1. 颜色转变成图片
    2. app评分跳转
    3. 获取当前系统语言环境
    4. 计算字符串的高度
    5. 强行关闭app的方法
    6. 如何快速的查看一段代码的执行时间
    7. 在使用view的缩放的时候,layer.border.width随着view的放大,会出现锯齿化的问题,解决这个问题需要设置这个属性。
    8. instrument中time profile 中的self, #self,%self各代表什么 ?
    9. 神器计算图片位置的函数:AVMakeRectWithAspectRatioInsideRect()
    10. 关于 如果一个矩形如果做了平移旋转缩放等一系列操作之后,上下左右的四个点(甚至矩形上任意一个点)的位置。
    11. tableViewCell上的button,点击获取所在row
    12. 设置粘贴内容
    13. iPhone为了节省电力所以有一个自动休眠机制,如果想让我们的APP不自动进入休眠只需要设置 UIApplication的idleTimerDisabled 属性为 YES 即可。(切勿滥用)
    14. UIApplicationUserDidTakeScreenshotNotification通知,当用户截屏时触发
  • iOS中书写代码规范35条小建议:点击前往【==规范==】

  • iOS常用正则表达式点击前往【==基础知识==】 又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本;





2018/12/09

  • OC与swift的数据传输点击前往【==混编==】

    1、swift之间的页面跳转与返回 2、oc监听swift推送的通知 3、swift内部推送接收的通知 4、oc调用swift的代理方法 5、swift调用oc代码块 6、oc对swift的属性传值、方法调用、代码块调用 7、swift对oc的属性传值、方法调用、代码块调用 8、swift之间的传值

  • ARKit和CoreLocation:第一部分点击前往【==框架==】

    第一部分将介绍ARKit的基础知识,从MapKit获取方向以及触摸矩阵变换的基础知识。在第二部分将讨论计算两个位置,以及如何利用位置数据,并变换成在ARKit场景的位置之间的轴承。





2018/12/06

SwiftLint 是 Realm 推出的一款 Swift 代码规范检查工具,Realm 就不用介绍了,他们家推出的移动端跨平台数据库在业内的名气还是很大的,就算没有用过,相信大多数人也是听过的。 SwiftLint 基于 Github 公布的 Swift 代码规范进行代码检查,并且能够很好的和 Xcode 整合。配置好所有的设置之后,在 Xcode 中执行编译时,SwiftLint 会自动运行检查,不符合规范的代码会通过警告或者 error 的形式指示出来,并且拥有丰富的配置项,可以进行大量的自定义,相当方便。

  • Xcode 配置 Swift Lint 规范代码风格点击前往【==规范==】
  • SwiftLint,规范代码,成为完美的偏执患者点击前往【==规范==】
  • 使用 SwiftLint 进行 Swift 代码规范检查点击前往【==规范==】




2018/12/05

  • iOS中打开的文件如何用其他应用打开选择自己的app点击前往【==基础知识==】

    1. 设置 Info.plist
    2. 设置 AppDelegate
    3. 接收通知
  • 使用UIDocumentInteractionController和QLPreviewController预览文件点击前往【==基础知识==】

  • iOS 调起第三方程序打开文件 ( UIDocumentInteractionController )点击前往【==基础知识==】

  • iOS开发打开word、excel、ppt、txt、pdf文档(可在线浏览)点击前往【==基础知识==】

打开文件的方法: 1.获取文件的沙盒路径path 2.将path路径转化URL 3.用webView显示出来





2018/12/04

  • GIT版本管理看这一篇就够了点击前往【==版本管理==】

    GIT基本上是目前最为先进的分布式版本控制系统,通过GIT能够非常方便的管理文件多个版本,能够实现版本的回滚,比对等功能,并且支持分布式也就是多人协同工作。

    1. init
    2. clone
    3. status
    4. add
    5. commit
    6. rm
    7. reset
    8. diff
    9. log
    10. tag
    11. branch
    12. checkout
    13. merge
    14. remote
    15. fetch
    16. pull
    17. push
  • iOS开发经验总结点击前往【==小常识==】

    1. iPhone Size
    2. 给navigation Bar 设置 title 颜色
    3. 如何把一个CGPoint存入数组里
    4. UIColor 获取 RGB 值
    5. 修改textField的placeholder的字体颜色、大小
    6. 两点之间的距离
    7. IOS开发-关闭/收起键盘方法总结
    8. 在使用 ImagesQA.xcassets 时需要注意
    9. UIPickerView 判断开始选择到选择结束
    10. iOS模拟器 键盘事件
    11. 在ios7上使用size classes后上面下面黑色
    12. 设置不同size在size classes
    13. 线程中更新 UILabel的text
    14. 使用UIScrollViewKeyboardDismissMode实现了Message app的行为
    15. 报错 "_sqlite3_bind_blob", referenced from:
    16. ios7 statusbar 文字颜色
    17. 获得当前硬盘空间
    18. 给UIView 设置透明度,不影响其他sub views
    19. 将color转为UIImage
    20. NSTimer 用法
    21. Bundle identifier 应用标示符
    22. NSDate 获取几年前的时间
    23. iOS加载启动图的时候隐藏statusbar
    24. iOS 开发,工程中混合使用 ARC 和非ARC
    25. iOS7 中 boundingRectWithSize:options:attributes:context:计算文本尺寸的使用
    26. NSDate使用 注意
    27. 在UIViewController中property的一个UIViewController的Present问题
    28. UITableViewCell indentationLevel 使用
    29. ActivityViewController 使用AirDrop分享
    30. 获取CGRect的height
    31. 打印 %
    32. 在工程中查看是否使用 IDFA
    33. APP 屏蔽 触发事件
    34. 设置Status bar颜色
    35. NSDictionary 转 NSString
    36. iOS7 中UIButton setImage 没有起作用
    37. User-Agent 判断设备
    38. UIPasteboard 屏蔽paste 选项
    39. class_addMethod 使用
    40. AFNetworking 传送 form-data
    41. 非空判断注意
    42. iOS 8.4 UIAlertView 键盘显示问题
    43. 模拟器中文输入法设置
    44. iPhone number pad
    45. UIView 自带动画翻转界面
    46. KVO 监听其他类的变量
    47. ios9 crash animateWithDuration
    48. 对NSString进行URL编码转换
    49. Xcode iOS加载图片只能用PNG
    50. 保存全屏为image
    51. 判断定位状态 locationServicesEnabled
    52. 微信分享的时候注意大小
    53. 图片缓存的清空
    54. TableView Header View 跟随Tableview 滚动
    55. TabBar的title 设置
    56. UITabBar,移除顶部的阴影
    57. 当一行中,多个UIKit 都是动态的宽度设置
    58. JSON的“” 转换为nil




2018/12/03





2018/11/29

  • iOS应用流畅度辨析点击前往【==性能==】

    • 用 Instruments 来检验你的app

    iOS界面处理是在主线程下进行的,系统图形服务通过 CADisplayLink 等机制通知 App,App 主线程开始在 CPU 中计算显示内容,比如视图的创建、布局计算、图片解码、文本绘制等。随后 CPU 会将计算好的内容提交到 GPU 去,由 GPU 进行变换、合成、渲染。随后 GPU 会把渲染结果提交到帧缓冲区去,等待下一次刷新信号到来时显示到屏幕上。显示器通常以固定频率进行刷新,如果在一个刷新时间内,CPU 或者 GPU 没有完成内容提交,则那一帧就会被丢弃,等待下一次机会再显示,而这时显示屏会保留之前的内容不变。这就是界面卡顿的原因。CPU 和 GPU 不论哪个阻碍了显示流程,都会造成掉帧现象。

  • 如何去除Xcode中的警告⚠️点击前往【==小常识==】

    `开发一个项目时,难免会产生很多无关紧要的警告,很多是第三方或是老代码不再被支持造成的,但并不影响使用,花大力气去解决警告也不合时宜,偷个懒,把一些隐藏掉吧!`
    
  • iOS开发——Category在项目中的实际运用点击前往【==小常识==】

    1. 扩展类的方法
    2. 扩展类的属性(结合runtime)
    3. 在没有源代码的情况下可以用来修复BUG
    4. 整体替换




2018/11/28

  • iOS 如何防止https抓包(中间人攻击),及charles抓包原理点击前往【==安全==】

  • iOS Charles 抓包指南 - 从入门到精通点击前往【==安全==】

    1. 安装 Charles
    2. 注册 License
    3. 添加 SSL 配置
    4. 配置手机代理
    5. 安装 Charles 证书
  • [iOS]iOS中网络请求判断是否设置代理点击前往【==安全==】

    NSDictionary *proxySettings = (__bridge NSDictionary *(CFNetworkCopySystemProxySettings());
    
    NSArray *proxies = (__bridge NSArray *)(CFNetworkCopyProxiesForURL((__bridge CFURLRef _Nonnull)([NSURL URLWithString:@"http://www.baidu.com&quot;]), (__bridge CFDictionaryRef _Nonnull)(proxySettings)));
    NSLog(@"\n%@",proxies);
    
    NSDictionary *settings = proxies[0];
    NSLog(@"%@",[settings objectForKey:(NSString *)kCFProxyHostNameKey]);
    NSLog(@"%@",[settings objectForKey:(NSString *)kCFProxyPortNumberKey]);
    NSLog(@"%@",[settings objectForKey:(NSString *)kCFProxyTypeKey]);
    
    if ([[settings objectForKey:(NSString *)kCFProxyTypeKey] isEqualToString:@"kCFProxyTypeNone"])
    {
    NSLog(@"没代理");
    }
    else
    {
    NSLog(@"设置了代理");
    }
    




2018/11/27

  • UITableView/UICollectionView调用reloadData刷新时界面闪烁点击前往【==小常识==】

    • 造成闪烁的原因,主要是因为CALayer有一个隐式动画,只要在调用reloadData刷新时,关闭隐式动画就可以避免了。代码示例如下:
    [CATransaction setDisableActions:YES];
    [self.collectionView reloadData];
    [CATransaction commit];
    
  • Xcode 快速开发 代码块点击前往【==小常识==】

    • Xcode的代码片段(Code Snippets)创建自定义的代码片段,当你重用这些代码片段时,会给你带来很大的方便。
  • Runtime的运用和减少应用崩溃点击前往【==基础知识==】

    • Objective-C 是一个动态语言,它需要一个运行时系统来动态的创建类和对象、进行消息传递和转发。




2018/11/26

  • iOS图片设置圆角性能优化点击前往【==性能==】

    • 第一种:设置CALayer的cornerRadius

    注意:ios9.0之后对UIImageView的圆角设置做了优化,UIImageView这样设置圆角 不会触发离屏渲染,ios9.0之前还是会触发离屏渲染。而UIButton还是都会触发离屏渲染。

    • 第二种:shouldRasterize=YES设置光栅化
    • 通过Core Graphics重新绘制带圆角的视图

    这种方式性能最好,但是UIButton上不知道怎么绘制,可以用UIimageView添加个 点击手势当做UIButton使用

    • 通过混合图层
  • “抖音”式的酷炫短视频开发进阶点击前往【==视频==】

  • iOS实现波浪效果点击前往【==绘制==】

  • 简易的iOS导航栏颜色渐变方案点击前往【==小常识==】





2018/11/22

  • 一行代码实现 UIView 镂空效果点击前往【==小常识==】

    本质上是 UIView 的 maskView 效果的「取反」。

  • Python的iOS自动化打包点击前往【==小常识==】

    使用xcodebuild来控制Xcode进行一系列的操作,从而完成打包的操作. 1.找到对应的项目 2.clean项目 3.archive项目 4.export IPA 5.上传蒲公英 6.发送邮件 7.收工

  • iOS 内存管理研究点击前往【==性能==】

    网上的绝大多数关于 iOS 内存管理的文章,大多是围绕 ARC/MRC、循环引用的原理或者是如何找寻内存泄漏来展开的,而这些内容更准确的说应该是 ObjC 或者 Swift 的内存管理,是语言层面带来的特性,而不是操作系统本身的内存管理。

    • 物理内存
    • 虚拟内存(VM for Virtual Memory)
      • Page In/Out
      • Wired memory
      • VM Region
      • VM Object
      • Resident Page




2018/11/21

  • UINavigationBar添加渐变的背景颜色点击前往【==小常识==】

  • iOS 高德地图 路径规划点击前往【==地图==】

  • iOS高德地图自定义定位小蓝点点击前往【==地图==】

  • 【iOS】高德地图MAMapKit的使用:导航功能。点击前往【==地图==】

  • 高德地图点击前往【==地图==】





2018/11/14

  • iOS中堆和栈的使用点击前往【==基础知识==】

    堆和栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。堆,队列优先,先进先出(FIFO—first in first out);栈,先进后出(FILO—First-In/Last-Out)。一般情况下,如果有人把堆栈合起来说,那它的意思是栈,而不是堆。

  • 以SDWebImage为例谈论源码点击前往【==基础知识==】

    SDWebImage是一个图片缓存的框架。相较于AFNetworking集成的UIImageView+AFNetworking.h,对于图片的缓存实际应用的是NSURLCache自带的cache机制。而NSURLCache每次都要把缓存的raw data 再转化为UIImage,就带来了数据处理和内存方面的更多操作。SDWebImage的缓存由SDImageCache类来实现,这是一个单例类,该类负责处理内存缓存及一个可选的磁盘缓存,其中磁盘缓存的写操作是异步的,这样就不会对UI操作造成影响。

    SDWebImage有沙盒缓存机制,主要由三块组成 1.内存图片缓存 2.内存操作缓存 3.磁盘沙盒缓存





2018/11/13

  • AFNetworking到底做了什么?点击前往【==三方框架==】

    作为一个iOS开发,也许你不知道NSUrlRequest、不知道NSUrlConnection、也不知道NSURLSession...(说不下去了...怎么会什么都不知道...)但是你一定知道AFNetworking。

  • iOS-UIBezierPath和各种layer把我玩坏了点击前往【==绘制==】

    UIBezierPath对象是CGPathRef数据类型的封装。path如果是基于矢量形状的,都用直线和曲线段去创建。我们使用直线段去创建矩形和多边形,使用曲线段去创建弧(arc),圆或者其他复杂的曲线形状。每一段都包括一个或者多个点,绘图命令定义如何去诠释这些点。每一个直线段或者曲线段的结束的地方是下一个的开始的地方。每一个连接的直线或者曲线段的集合成为subpath。一个UIBezierPath对象定义一个完整的路径包括一个或者多个subpaths。





2018/11/13

  • iOS 集成友盟分享图片链接为http时无法加载问题解决点击前往【==小常识==】

问题描述 UMShareWebpageObject *obj = [UMShareWebpageObject shareObjectWithTitle:title descr:shareText thumImage:imgUrl];里面thumImage如果是本地图片,分享的时候就能够显示图片,但是如果换成http的网络图片地址,就无法显示

  • HTTP、TCP、UDP以及SOCKET之间的区别/联系点击前往【==基础知识==】

    在网络层:有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 在传输层:中有TCP协议与UDP协议。 在应用层:有FTP、HTTP、TELNET、SMTP、DNS等协议。

  • iOS开发 | 自定义不规则label点击前往【==绘制==】





2018/11/12

  • HealthKit Swift 教程: 开始点击前往【==框架==】

    HealthKit 从 iOS 8 开始出现。它实际上是一个关于所有健康数据的集中式存储库,允许用户构建一个生物数据库并存储健康数据。 在这篇 HealthKit 教程中,你将创建一个简单的跟踪健康数据的 App,同时学习: 如何请求 HealthKit 访问权限 如何读取 HealthKit 数据并显示到 UITableView中 如何将数据写入到 HealthKit 的核心数据库

  • iOS HealthKit 健康应用点击前往【==框架==】

  • iOS中GIF图片的分解、合成与显示点击前往【==相册==】





2018/11/11

  • 10 个 iOS 开发实用小技巧点击前往【==小常识==】

    1. 控件的局部圆角问题
    2. navigationBar 的透明问题
    3. 全局设置 navigationBar 标题的样式和 barItem 的标题样式
    4. navigationBar 隐藏显示的过度
    5. 侧滑手势返回
    6. 给 webView 添加头视图
    7. 模态跳转的动画设置
    8. 图片处理只拿到图片的一部分
    9. 给 UIView 设置图片
    10. 给 TableView 或者 CollectionView 的 cell 添加简单动画
  • valueForKeyPath:的妙用点击前往【==小常识==】

    • valueForKeyPath:针对集合的使用(Array Set)
    • 集合运算符
    • 简单集合操作符
    • 对象操作符
    • 嵌套集合操作符
  • Protocol Buffer 入门使用: iOS点击前往【==小常识==】 Protocol Buffer是google于2008推出的一种数据交换的格式,它独立于语言,独立于平台。





2018/11/08

  • iOS中static,const,extern相关的问题点击前往【==基础知识==】

  • iOS--随机数rand、random、arc4random点击前往【==小常识==】

    1.srand((unsigned)time(0)); //不加这句每次产生的随机数不变
    int i = rand() % 5;
    
    2.srandom(time(0));
    int i = random() % 5;
    
    3.int i = arc4random() % 5 ;
    
  • iOS保存App中的照片到系统相册或自建相册的方法点击前往【==相册==】

  • iOS-使用WKWebview实现新闻详情页(JS和OC交互)点击前往【==基础控件==】


2018/11/07

  • iOS计算机视觉—人脸识别点击前往【==框架==】 人脸识别是计算机视觉的一种应用,iOS中常用的有四种实现方式:CoreImage、Vision、OpenCV、AVFoundation。

  • iOS 时间处理(仿朋友圈、微博发布时间)点击前往【==时间==】

  • NSNumberFormatter介绍和用法点击前往

    • NSNumberFormatter可以用来处理NSString和NSNumber之间的转化,可以满足基本的数字形式的转化。
      • 四舍五入到整数
      • 货币数字形式
      • 货币的形式,带本地化的货币符号
      • 百分数形式,并且四舍五入到百分比的整数部分
      • 科学计数形式
      • 本地化拼写形式
      • 序数形式
      • 货币形式 显示ISO分配的货币符号
      • 货币形式
      • 会计形式




2018/11/06

  • 学习绘制iOS雷达图点击前往【==绘制==】

    • 用UIBezierPath + CAShaperLayer绘制
  • iOS | 小收获:自动埋点点击前往【==小常识==】 用户行为统计,俗称埋点,是一个成熟项目中必不可少的环节。埋点的常规做法是在项目中所有需要埋点的地方插入埋点,但随着项目不断壮大,埋点的地方越来越多,埋点代码散落在项目中不同角落,不易于管理和后期维护,出于简化埋点开发的目的,针对自动埋点做了小小的总结。

  • iOS自适应cell行高的那点破事儿点击前往【==小常识==】

    • iOS8之后就更简单了,直接使用:(这里要注意delegate中的返回高度方法就不用在写了)

      self.tableView.estimatedRowHeight = 666;
      self.tableView.rowHeight = UITableViewAutomaticDimension;
      
  • 如何精确度量 iOS App 的启动时间点击前往【==小常识==】





2018/11/05

  • iOS 性能调优,成为一名合格iOS程序员必须掌握的技能点击前往【==性能==】

    • Instuments
      • Activity Monitor
      • Allocations
    • Core Animation
      • Color Blended Layers(混合过度绘制)
      • Color Hits Green and Misses Red(光栅化缓存图层的命中情况)
      • Color Copied Image (拷贝的图片)
      • Color Immediately (颜色立即更新)
      • Color Misaligned Image (图片对齐方式)
      • Color Offscreen- Rendered Yellow (离屏渲染)
      • Color Compositing Fast-Path Blue
      • Flash Updated Regions (Core Graphics 绘制的图层)
    • Leaks
    • Time Profiler
  • CoreBluetooth- iOS蓝牙开发点击前往【==基础知识==】





2018/11/01

  • iOS动画总结(Core Animation&POP&贝塞尔&Transform)点击前往【==动画==】

  • iOS 模拟器调试大法了解一下?点击前往【==基础知识==】

  • iOS自动布局——Masonry详解点击前往【==三方框架==】

  • iOS 关于全面屏适配的方案及UI在不同尺寸下适配方案点击前往【==基础知识==】





2018/10/30

  • iOS 富文本风格NSMutableParagraphStyle、定制UITextView插入图片和定制复制点击前往 【==基础知识==】

  • iOS UIButton之UIEdgeInsets详解点击前往 【==基础知识==】

  • App预览制作,看我就够了点击前往 【==审核==】





2018/10/29





2018/10/25

  • iOS套接字连接小票打印机点击前往 【==基础知识==】

  • iOS Bluetooth 打印小票(一)点击前往 【==基础知识==】

  • iOS Bluetooth 打印小票(二)点击前往 【==基础知识==】





2018/10/23

  • CocoaAsyncSocket点击前往 【==三方框架==】

  • 关于使用GCDAsyncSocket点击前往 【==三方框架==】

  • iOS Socket封包、粘包、拆包处理点击前往 【==三方框架==】

  • iOS 使用GCDAsyncSocket及粘包、半包处理点击前往 【==三方框架==】

  • iOS 使用CocoaAsyncSocket自定义协议的byte方式传输点击前往 【==三方框架==】

  • 利用CocoaAsyncSocket实现socket客户端(swift4)点击前往 【==三方框架==】

  • Swift 中的位操作点击前往 【==基础知识==】





2018/10/22





2018/10/21

  • iOS界面渲染流程分析点击前往 【==基础知识==】 iOS渲染视图的核心是Core Animation 其渲染层次依次为:图层树->呈现树->渲染树 1.CPU阶段 布局(Frame) 显示(Core Graphics) 准备(QuartzCore/Core Animation) 通过IPC提交(打包好的图层树以及动画属性) 2.OpenGL ES阶段 生成(Generate) 绑定(Bind) 缓存数据(Buffer Data) 启用(Enable) 设置指针(Set Pointers) 绘图(Draw) 清除(Delete) 3.GPU阶段 接收提交的纹理(Texture)和顶点描述(三角形) 应用变换(transform) 合并渲染(离屏渲染等) 其iOS平台渲染核心原理的重点主要围绕前后帧缓存、Vsync信号、CADisplayLink

  • iOS 快速从OC过渡到Swift,由理论到实战点击前往【==混编==】

  • OC和Swift混编 - 在Swift中实现OC中静态常量和宏的效果点击前往【==混编==】

  • 从 OC 到 Swift 的快速入门与专业实践点击前往【==混编==】

    1.数据 1.1 简单使用 1.2 数据类型 1.3 可选与非可选数据类型 1.4 结构体 1.5 枚举 2.方法到函数 3.类 3.1 简单的定义 3.2 特殊方法 3.3 setter 与 getter 方法 3.4 属性监听 4.协议(代理) 5.控制器中的代码布局 6.@objc 6.1 协议中使用 6.2 函数中使用





2018/10/18

  • iOS 后台无UI交互打印点击前往 【==基础知识==】

  • iOS打印功能详解 UIPrint​Interaction​Controller点击前往 【==基础知识==】

  • iOS UIPrintInteractionController打印点击前往 【==基础知识==】

  • 使用iOS AirPrint 让你的APP轻松实现打印功能点击前往 【==基础知识==】

  • AirPrint:无交互的后台打印实现点击前往 【==基础知识==】





2018/10/17

  • 检测设备是否为 iPhone X/XS/XR 的几种方式 点击前往 【==小常识==】

    方式一:通过获取设备的 device model 来判断 方式二:通过获取屏幕的宽高来判断 方式三:通过底部安全区域的高度来判断 方式四:通过是否支持 FaceID 判断 方式五:通过 UIStatusBar 的高度判断

  • Swift基于CocoaAsyncSocket开发Socket通信 点击前往 【==三方框架==】

    基于Scoket原生:代表框架 CocoaAsyncSocket。 基于WebScoket:代表框架 SocketRocket。 基于MQTT:代表框架 MQTTKit。 基于XMPP:代表框架 XMPPFramework。

  • iOS:基于Socket的第三方框架CocoaAsyncSocket的使用点击前往 【==三方框架==】

    CocoaAsyncSocket无疑是目前封装得最完善的Socket库了:支持异步TCP/UDP,支持GCD,Objective-C接口封装,同时还有日志跟踪功能,使用此日志跟踪,程序员可以很方便的进行调试。

  • iOS开发--APP调用打印机(非蓝牙)点击前往【==框架==】

    利用苹果iOS系统内置AirPrint功能WiFi无线打印照片,Word,PDF等各种文件到你的Air Printer打印机,但有个前提是你的打印机必须支持苹果Air Print功能,即AirPrint-Enable Printer。





2018/10/16

  • iOS游戏引擎 点击前往 【==基础知识==】

    名称 效果 平台
    cocos2dx 2D 跨平台
    unity3d 3D 跨平台
    Spritekit 2D iOS
    SceneKit 3D iOS
  • iOS中忽略警告 点击前往 【==小常识==】

  • OC 多线程之 GCD知识从基础到进阶 (1)点击前往 【==多线程==】





2018/10/15

  • 适合写api接口文档的管理工具有哪些?点击前往 【==小常识==】 1.MinDoc 网址 2.eoLinker 网址 3.apizza 网址 4.RAML 网址 5.Swagger 网址 6.Showdoc 网址 7.apidoc 网址
    8.RAP 网址 9.APIJSON 网址

  • iOS-MRC与ARC区别以及五大内存区点击前往 【==基础知识==】

    1.五大内存区域
    1.1 栈区
    1.2 堆区
    1.3 全局区
    1.4 常量区
    1.5 代码区
    1.6 自由存储区
    1.7 static静态变量
    1.8 extern全局变量
    1.9 const常量
    -
    2.属性标识符
    2.1 @property、@synthesize、@dynamic
    2.2 nonatomic与atomic
    2.3 strong、weak、retain、assgin、copy、unsafe_unretained
    2.4 readOnly、readWrite、getter=、setter=
    2.5 __unsafe_unretained、__weak、__strong
    -
    3.MRC与ARC区别
    3.1 MRC手动内存管理
    3.2 ARC自动内存管理
    3.3 autoreleasepool自动释放池
    -
    4.NSString单独说
    
  • iOS-八大基本排序 点击前往 【==算法==】

    `1.冒泡排序
     2.选择排序
     3.堆排序
     4.快速排序
     5.(插入排序)直接插入排序
     6.(插入排序)希尔排序
     7.归并排序
     8.基数排序
    `
    




2018/10/13

  • IOS加载本地html5及修改点击前往 【==小常识==】 document.getElementsByClassName() //根据class属性 document.getElementsByName() //根据name属性 document.getElementById()//根据id属性 document.getElementsByTagName()//根据标签名

  • iOS 【Objective-C 微博发布日期格式化】点击前往 【==时间==】

  • iOS---防止UIButton重复点击的三种实现方式点击前往 【==小常识==】

  • iOS UIView 和 CALayer 的关系 点击前往 【==基础知识==】





2018/10/12

  • iOS UITextView 高度随文字自动增加,并跟随键盘移动(一)点击前往 【==基础控件==】

  • iOS UITextView 高度随文字自动增加,并跟随键盘移动(二)点击前往 【==基础控件==】

  • iOS:如何优雅的让UITextView根据输入文字实时改变高度点击前往 【==基础控件==】

  • 史上最全的iOS之UITextView实现placeHolder占位文字的N种方法点击前往 【==基础控件==】

  • iOS 使用IQKeyboardManager出现导航栏电池条变白、变透明问题处理点击前往 【==小常识==】

  • iOSTableview 禁止下拉,允许上拉点击前往 【==小常识==】





2018/10/10

  • iOS App提交指南(二)-协议、税务和银行业务点击前往 【==审核==】

由于App属于收费应用,还需要填写协议、税务和银行信息 流程如上连接

  • 用 Tesseract 开发一个你自己的文字识别应用点击前往 【==三方框架==】

    文字识别,缩写叫做 OCR,全称 Optical character recognition,译为光学字符识别

  • APP推广实战技能—— iOS100字符关键词覆盖!点击前往 【==推广==】

关键词也称关键词覆盖,可以简单的理解为当你在IOS上想到的任何词类,这个App都会出现在你眼前,那说明这个关键词你的产品就覆盖上了(当然,有些大咖给出专业化的术语,即用户在 App Store 搜索一些词时,如果一款 App 出现在搜索结果中,那么该 App 就覆盖了这些词。)。 关键词覆盖范围越广,App 就有越多的机会展示给用户,自然用户的下载量当然也会随波逐涨,这对于App推广运营大有好处。

  • 数据安全及各种加密算法对比点击前往 【==算法==】

    • Base64编码(基础)
    • 单项散列函数 MD5、SHA1、SHA256、SHA512等
    • 消息认证码 HMAC-MD5、HMAC-SHA1
    • 对称加密 DES|3DES|AES(高级加密标准)
    • 非对称加密 RSA
    • 数字签名
    • 证书
  • iOS绘图教程点击前往 【==绘制==】

    iOS支持两套图形API族:Core Graphics/QuartZ 2D 和OpenGL ES。OpenGL ES是跨平台的图形API,属于OpenGL的一个简化版本。QuartZ 2D是苹果公司开发的一套API,它是Core Graphics Framework的一部分。





2018/10/09

  • iOS 相机拍照、相册获取照片(仿微信) 一一 拍照、图片裁剪点击前往 【==相册==】

  • iOS Xcode工程目录的 folder 和 group的区别(蓝色和黄色文件夹的区别)点击前往 【==基础知识==】 group 一般只在你的工程中是文件夹的形式,但是在本地的目录中还是以散乱的形式放在一起的,除非你是从外部以group的形式引用进来的。 folder 只能作为资源,整个引用进项目,不能编译代码,也就是说,以folder形式引用进来的文件,不能被放在complie sources列表里面。

  • iOS view被导航条遮挡点击前往 【==小常识==】

1. 设置edgesForExtendedLayout
self.edgesForExtendedLayout = UIRectEdgeNone; //view不需要拓展到整个屏幕
2. 设置导航条的透明度
self.navigationController.navigationBar.translucent = NO;
  • UIViewContentMode 图片显示模式(iOS)点击前往【==基础知识==】

  • iOS开发中遇到过的坑点击前往【==小常识==】

    • 手机录音或通话时,app界面整体下移
    • 点击导航栏下方也会触发导航栏按钮的点击事件
    • 输入中文时限制字符长度
    • 修改导航栏颜色
    • 界面莫名其妙下移
    • GCD组函数
    • UISearchController
    • 自定义相机照片截取




2018/10/08

  • iOS 简约加载动画详解点击前往 【==动画==】

  • UITableView ReloadData那些坑点击前往【==小常识==】

    调用reloadData 之后,立即调用numberOfRowsInSection,但是cellForRowAt和heightForRow 是异步调用,回到当前RunLoop,布局cell时才会被调用. reloadData 这样的特性就导致了没有及时调用相对应的代理方法,如果在reloadData之后,我们想要执行某些操作,就会导致出现不可预见的结果.

  • iOS时间格式化输出技巧点击前往【==时间==】

  • IOS性能优化篇点击前往【==性能==】





2018/10/07

  • iOS --苹果自带的UIMenuController功能扩展点击前往【==基础控件==】

  • 做一个 App 前需要考虑的几件事点击前往【==框架==】

    • 完善的日志系统
    • Commit Message 规范
    • 代码规范
    • 准备一份编程守则
    • 页面布局规范
    • 统计埋点
    • App 架构
    • 页面跳转机制
    • 在线配置
    • 选择合适的 Crash 平台
    • Code Review
    • 选择合适的开发模式
    • 持续集成
    • Bug 管理系统
    • 项目管理工具
    • Checklist
  • ReactiveCocoa基本用法点击前往 【==三方框架==】

在我们iOS开发过程中,经常会响应某些事件来处理某些业务逻辑,例如按钮的点击,上下拉刷新,网络请求,属性的变化(通过KVO)或者用户位置的变化(通过CoreLocation)。但是这些事件都用不同的方式来处理,比如action、delegate、KVO、callback等。
其实这些事件,都可以通过RAC处理,ReactiveCocoa为事件提供了很多处理方法,而且利用RAC处理事件很方便,可以把要处理的事情,和监听的事情的代码放在一起,这样非常方便我们管理,就不需要跳到对应的方法里。非常符合我们开发中高聚合,低耦合的**。





2018/10/06

  • 重识iOS之Property点击前往【==基础知识==】

    • 简介:属性(property)是Objective-C的一项特性,用于封装对象中的数据。这一特性可以令编译器自动编写与属性相关的存取方法,并且保存为各种实例变量。
    • 本质:属性的本质是实例变量与存取方法的结合。@property = ivar + getter + setter

    strong:表示指向并拥有该对象。其修饰的对象引用计数会 +1 ,该对象只要引用计数不为 0 就不会销毁,强行置空可以销毁它。一般用于修饰对象类型、字符串和集合类的可变版本。

    copy:与 strong类似,设置方法会拷贝一份副本。一般用于修饰字符串和集合类的不可变版以及block (历史遗留问题)。

    weak:表示指向但不拥有该对象。其修饰的对象引用计数不会增加,属性所指的对象销毁时属性值会清空。ARC环境下一般用于修饰可能会引起循环引用的对象,delegate 、xib 控件用 weak 修饰。

    assign:主要用于修饰基本数据类型,如 NSIteger 、CGFloat 等,这些数值主要存在于栈中。


  • iOS常用正则表达式点击前往【==基础知识==】

    我们先来举个例子分析一个可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等的表达式 表达式: \(?0\d{2}[) -]?\d{8} 首先是一个转义字符(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?), 最后是8个数字(\d{8})

  • UICollectionView(一)——整体总结点击前往【==基础控件==】

    • 包括基本使用,自定义布局,自定义插入删除动画,自定义转场动画等几部分。
  • iOS实现多个可变cell复杂界面的制作 点击前往【==基础控件==】 多个可变cell复杂界面





2018/10/05

  • iOS Native混编Flutter交互实践点击前往【==开发模式==】

  • 流言终结者- Flutter和RN谁才是更好的跨端开发方案?点击前往【==开发模式==】

  • contentSize、contentOffset和contentInset的图解辨别点击前往【==基础知识==】

contentSize:即内容,就是scrollview可以滚动的区域,比如frame = (0 ,0 ,100 ,200) contentSize = (100 ,400),代表你的scrollview可以上下滚动,滚动区域为frame大小的两倍。其中常用的是contentSize.height = 内容的高度。
contentOffset: 即偏移量,其中分为contentOffset.y=内容的顶部和frame顶部的差值,contentOffset.x=内容的左边和frame左边的差值,下面重点阐述contentOffset.y,因为contentOffset.y最为常用。
contentInset:即内边距,contentInset = 在内容周围增加的间距(粘着内容),contentInset的单位是UIEdgeInsets,默认值为UIEdgeInsetsZero。

  • iOS自定义裁剪区域,正方形圆形图片头像裁剪,仿QQ头像裁剪,圆形遮罩,矩型遮罩点击前往【==绘制==】

    • 矩形遮罩
        //矩形裁剪区域
    - (void)transparentCutSquareArea{
        //圆形透明区域
        UIBezierPath *alphaPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, _selfWidth, _selfHeight)];
        UIBezierPath *squarePath = [UIBezierPath bezierPathWithRect:_cropFrame];
        [alphaPath appendPath:squarePath];
        CAShapeLayer *shapeLayer = [CAShapeLayer layer];
        shapeLayer.path = alphaPath.CGPath;
        shapeLayer.fillRule = kCAFillRuleEvenOdd;
        self.overLayView.layer.mask = shapeLayer;
        
        //裁剪框
        UIBezierPath *cropPath = [UIBezierPath bezierPathWithRect:CGRectMake(_cropFrame.origin.x-1, _cropFrame.origin.y-1, _cropFrame.size.width+2, _cropFrame.size.height+2)];
        CAShapeLayer *cropLayer = [CAShapeLayer layer];
        cropLayer.path = cropPath.CGPath;
        cropLayer.fillColor = [UIColor whiteColor].CGColor;
        cropLayer.strokeColor = [UIColor whiteColor].CGColor;
        [self.overLayView.layer addSublayer:cropLayer];
    }
    
    • 圆形裁剪遮罩
        //圆形裁剪区域
    -(void)transparentCutRoundArea{
        CGFloat arcX = _cropFrame.origin.x + _cropFrame.size.width/2;
        CGFloat arcY = _cropFrame.origin.y + _cropFrame.size.height/2;
        CGFloat arcRadius;
        if (_cropSize.height > _cropSize.width) {
            arcRadius = _cropSize.width/2;
        }else{
            arcRadius  = _cropSize.height/2;
        }
        
        //圆形透明区域
        UIBezierPath *alphaPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, _selfWidth, _selfHeight)];
        UIBezierPath *arcPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(arcX, arcY) radius:arcRadius startAngle:0 endAngle:2*M_PI clockwise:NO];
        [alphaPath appendPath:arcPath];
        CAShapeLayer  *layer = [CAShapeLayer layer];
        layer.path = alphaPath.CGPath;
        layer.fillRule = kCAFillRuleEvenOdd;
        self.overLayView.layer.mask = layer;
        
        //裁剪框
        UIBezierPath *cropPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(arcX, arcY) radius:arcRadius+1 startAngle:0 endAngle:2*M_PI clockwise:NO];
        CAShapeLayer *cropLayer = [CAShapeLayer layer];
        cropLayer.path = cropPath.CGPath;
        cropLayer.strokeColor = [UIColor whiteColor].CGColor;
        cropLayer.fillColor = [UIColor whiteColor].CGColor;
        [self.overLayView.layer addSublayer:cropLayer];
    }
    
    • 裁剪矩形图片
        -(UIImage *)getSubImage{
        //裁剪区域在原始图片上的位置
        CGRect myImageRect = CGRectMake(leftTopPoint.x * scaleRatio, leftTopPoint.y*scaleRatio, width, height);
        
        //裁剪图片
        CGImageRef imageRef = self.image.CGImage;
        CGImageRef subImageRef = CGImageCreateWithImageInRect(imageRef, myImageRect);
        UIGraphicsBeginImageContext(myImageRect.size);
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextDrawImage(context, myImageRect, subImageRef);
        UIImage* smallImage = [UIImage imageWithCGImage:subImageRef];
        CGImageRelease(subImageRef);
        UIGraphicsEndImageContext();
        
        //是否需要圆形图片
        if (self.isRound) {
            //将图片裁剪成圆形
            smallImage = [self clipCircularImage:smallImage];
        }
        return smallImage;
    }
    
    • 裁剪圆形图片
        //将图片裁剪成圆形
    -(UIImage *)clipCircularImage:(UIImage *)image{
        CGFloat arcCenterX = image.size.width/ 2;
        CGFloat arcCenterY = image.size.height / 2;
        UIGraphicsBeginImageContext(image.size);
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextBeginPath(context);
        CGContextAddArc(context, arcCenterX, arcCenterY, image.size.width/2, 0.0, 2*M_PI, NO);
        CGContextClip(context);
        CGRect myRect = CGRectMake(0 , 0, image.size.width ,  image.size.height);
        [image drawInRect:myRect];
        
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        
        return  newImage;
    }
    




2018/09/30

  • iOS-Json字符串转字典,字典转Json字符串、以及Json字符串去掉空格、换行符等点击前往【==基础知识==】


  • ios实现颜色渐变的几种方法点击前往【==颜色==】

  • CABasicAnimation的使用方法(移动,旋转,缩放)点击前往【==动画==】

  • iOS开发_原生二维码生成与读取点击前往【==二维码==】

  • ios 二维码生成(带图标)以及相册识别二维码跳转点击前往【==二维码==】

  • ios 二维码扫描(原生,可限制扫描区域)点击前往【==二维码==】




2018/09/29

  • iOS 生成Excel文件点击前往【==基础知识==】

    // 创建存放XLS文件数据的数组
    NSMutableArray  *xlsDataMuArr = [[NSMutableArray alloc] init];
    // 第一行内容
    [xlsDataMuArr addObject:@"Time"];
    [xlsDataMuArr addObject:@"Address"];
    [xlsDataMuArr addObject:@"Person"];
    [xlsDataMuArr addObject:@"Reason"];
    [xlsDataMuArr addObject:@"Process"];
    [xlsDataMuArr addObject:@"Result"];
    // 100行数据
    for (int i = 0; i < 100; i ++) {
        [xlsDataMuArr addObject:@"2016-12-06 17:18:40"];
        [xlsDataMuArr addObject:@"GuangZhou"];
        [xlsDataMuArr addObject:@"Mr.Liu"];
        [xlsDataMuArr addObject:@"Buy"];
        [xlsDataMuArr addObject:@"TaoBao"];
        [xlsDataMuArr addObject:@"Debt"];
    }
    // 把数组拼接成字符串,连接符是 \t(功能同键盘上的tab键)
    NSString *fileContent = [xlsDataMuArr componentsJoinedByString:@"\t"];
    // 字符串转换为可变字符串,方便改变某些字符
    NSMutableString *muStr = [fileContent mutableCopy];
    // 新建一个可变数组,存储每行最后一个\t的下标(以便改为\n)
    NSMutableArray *subMuArr = [NSMutableArray array];
    for (int i = 0; i < muStr.length; i ++) {
        NSRange range = [muStr rangeOfString:@"\t" options:NSBackwardsSearch range:NSMakeRange(i, 1)];
        if (range.length == 1) {
            [subMuArr addObject:@(range.location)];
        }
    }
    // 替换末尾\t
    for (NSUInteger i = 0; i < subMuArr.count; i ++) {
        if ( i > 0 && (i%6 == 0) ) {
            [muStr replaceCharactersInRange:NSMakeRange([[subMuArr objectAtIndex:i-1] intValue], 1) withString:@"\n"];
        }
    }
    // 文件管理器
    NSFileManager *fileManager = [[NSFileManager alloc]init];
    //使用UTF16才能显示汉字;如果显示为#######是因为格子宽度不够,拉开即可
    NSData *fileData = [muStr dataUsingEncoding:NSUTF16StringEncoding];
    // 文件路径
    NSString *path = NSHomeDirectory();
    NSString *filePath = [path stringByAppendingPathComponent:@"/Documents/export.xls"];
    NSLog(@"文件路径:\n%@",filePath);
    // 生成xls文件
    [fileManager createFileAtPath:filePath contents:fileData attributes:nil];
    
  • 一份走心的iOS开发规范点击前往【==规范==】

  • Objective-C实现链式编程语法(DSL)点击前往【==语法==】

  • Swift和OC互调 点击前往 【==混编==】

  • iOS-导航栏变透明的几种方法点击前往【==小常识==】

    • 第一种
    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
        //去掉导航栏底部的黑线
        self.navigationController.navigationBar.shadowImage = [UIImage new];
    
    • 第二种
    [[self.navigationController.navigationBar subviews] objectAtIndex:0].alpha = 0;
    
    • 第三种
    for (UIView *aView in self.navigationController.navigationBar.subviews) {
        if ([aView isKindOfClass:NSClassFromString(@"_UINavigationBarBackground")]) {
            aView.hidden = YES;
        }
    }
    
  • iOS 中 UIView 的 clipsTobounds 属性点击前往【==小常识==】

    • clipsToBounds 决定了子视图的显示范围。 具体的说,就是当它取值为 YES 时,剪裁超出父视图范围的子视图部分;当它取值为 NO 时,不剪裁子视图。 默认值为 NO,但是在 UIScrollView 中,它的默认值是 YES,也就是说默认裁剪的。
  • iOS 如何让button上的字体居左居右对齐点击前往【==小常识==】

    首先,这里使用button.titleLabel.textAlignment = NSTextAlignmentLeft; 这行代码是没有效果的,这只是让标签中的文本左对齐,但并没有改变标签在按钮中的对齐方式。
    
    所以我们使用button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
    




2018/09/28

  • ios中给view添加圆角并指定位置点击前往【==绘制==】

比较推荐使用第三种,内存消耗少,速度快。 * 设置图层的属性 * 第二种使用贝塞尔曲线UIBezierPath,开启图形上下文画出一个圆 * 第三种使用UIBezierPath和CAShareLayer设置圆角

  • iOS 日常工作之常用宏定义大全点击前往【==定义==】

  • iOS 枚举的巧用点击前往【==基础知识==】

    • 如果我们在枚举值中看见<<那我们就可以通过|(位运算符:或)进行组合使用

    • 如下图枚举值中没有<<,这就是普通的NSInteger类型的枚举, 所以不能组合使用:

      NS_OPTIONS 与 NS_ENUM 和 enum 是有什么区别呢?
      
      1. 通过上面介绍我们可以看出enum可以声明一般类型和位掩码(bitmasked)类型

      2. NS_ENUM声明一般类型, NS_OPTIONS声明掩码(bitmasked)类型

      3. 那么问题又来了, 直接用enum不就可以了? 答案不是这样的, 苹果建议我们在OC中使用NS_ENUM与NS_OPTIONS, 为什么呢? 因为他们除了推断出不同类型的枚举,再就是当编译Objective-C++模式,它们产生的代码是不同的, 就是因为不同所以混编的时候使用enum会报错!


  • iOS实现应用外自带地图、高德地图、百度地图导航点击前往【==地图==】
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    
    NSLog(@"numberOfButtons == %ld",actionSheet.numberOfButtons);
     NSLog(@"buttonIndex == %ld",buttonIndex);
    
    if (buttonIndex == 0) {
        
        NSLog(@"自带地图触发了");
        
        MKMapItem *currentLocation =[MKMapItem mapItemForCurrentLocation];
        
        MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:self.coordinate addressDictionary:nil]];
        
        [MKMapItem openMapsWithItems:@[currentLocation,toLocation] launchOptions:@{MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,
            MKLaunchOptionsShowsTrafficKey:[NSNumber numberWithBool:YES]}];

    }
    //既安装了高德地图,又安装了百度地图
    if (actionSheet.numberOfButtons == 4) {
        
        if (buttonIndex == 2) {
            
            NSLog(@"高德地图触发了");
            
            NSString *urlsting =[[NSString stringWithFormat:@"iosamap://navi?sourceApplication= &backScheme= &lat=%f&lon=%f&dev=0&style=2",self.coordinate.latitude,self.coordinate.longitude]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            [[UIApplication  sharedApplication]openURL:[NSURL URLWithString:urlsting]];
        }
        if (buttonIndex == 3) {
            
            NSLog(@"百度地图触发了");
            NSString *urlsting =[[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",self.coordinate.latitude,self.coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlsting]];
        }
 
    }
    //安装了高德地图或安装了百度地图
    if (actionSheet.numberOfButtons == 3) {
        
        if (buttonIndex == 2) {
            
            if ( [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
                
                NSLog(@"只安装的高德地图触发了");
                NSString *urlsting =[[NSString stringWithFormat:@"iosamap://navi?sourceApplication= &backScheme= &lat=%f&lon=%f&dev=0&style=2",self.coordinate.latitude,self.coordinate.longitude]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
                [[UIApplication  sharedApplication]openURL:[NSURL URLWithString:urlsting]];
               
            }
            if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {
                 NSLog(@"只安装的百度地图触发了");
                NSString *urlsting =[[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",self.coordinate.latitude,self.coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlsting]];
            }

           
        }
        
    }
    
}





2018/09/27

  • iOS 拨打电话三种方式总结点击前往【==小常识==】

    • 这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示

      NSMutableString* str=[[NSMutableString alloc]initWithFormat:@"tel:%@",@"186xxxx6979"];
      [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
      
      
    • 这种方法,打完电话后还会回到原来的程序,也会弹出提示,推荐这种

      NSMutableString* str=[[NSMutableString alloc] initWithFormat:@"tel:%@",@"186xxxx6979"];
      
      UIWebView * callWebview = [[UIWebView alloc] init];
      
      [callWebview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:str]]];
      
      [self.view addSubview:callWebview];
      
      
    • 这种方法也会回去到原来的程序里(注意这里的telprompt),也会弹出提示

        ``` 
        NSMutableString *str=[[NSMutableString alloc] initWithFormat:@"telprompt://%@",@"186xxxx6979"];
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]]
        
        ```
      
  • iOS动画篇:下拉刷新动画点击前往【==动画==】

  • iOS GCD详细介绍点击前往【==多线程==】

  • UILabel设置圆角无效是不是少了这个?点击前往【==小常识==】

    label.layer.cornerRadius = 2.f;
    
    同时需要设置
    label.clipsToBounds = YES; 
    或者        
    label.layer.masksToBounds = YES;
    
    
  • iOS阴影设置详解点击前往【==小常识==】





2018/09/26

  • iOS下的实际网络连接检测:RealReachability点击前往【==网络==】 RealReachability架构图

  • iOS【WKWebView转PDF、图片】点击前往 【==基础控件==】

  • iOS 12正式版新特性总结点击前往 【==小常识==】

  • 十分钟接入iOS 12新特性——Siri Shortcuts点击前往 【==框架==】

    • Siri Shortcuts的API有两大类:NSUserActivity和Intents

    • 接入步骤

      1. plist添加activity type(Define Shortcut)
      2. 配置NSUserActivity并通知Siri(Donate Shortcut)
      3. 在AppDelegate中处理Siri打开APP请求 (Handle Shortcut)
      
  • iOS 快速从OC过渡到Swift,由理论到实战 点击前往【==混编==】

    1. 常量let和变量var
    2. 输出print
    3. 数据类型(布尔值、数组、字典、元组、可选类型)
    4. 几种运算符(区间运算符、空合运算符、溢出运算符)
    5. 控制语句
    6. 函数和闭包
    7. 类和结构体
    8. 属性(计算属性、延迟属性(懒加载)、属性观察器、类型属性)
    9. 枚举(枚举语法、关联值)
    10. 扩展
    11. 协议(协议语法、可选协议)
    12. 循环引用(弱引用(weak)、无主引用(unowned))
    13. 类型转换




2018/09/25

  • iOS下将照片保存到相册的三种方法点击前往【==相册==】
    • 使用UIImageWriteToSavedPhotosAlbum函数将图片保存到相册
    • 使用AssetsLibrary框架中的ALAssetsLibrary类来实现
    • 使用Photos框架的PHPhotoLibrary类来实现保存到相册功能
  • 针对WKWebView进行内容的截屏点击前往 【==基础控件==】
    • 推荐使用第三方框架DDGScreenShot(swift)

    • 原理:

      UIGraphicsBeginImageContextWithOptions(<#CGSize size#>, <#BOOL opaque#>, <#CGFloat scale#>)
      

size——绘制图片的大小 opaque—透明开关,如果图形完全不用透明,设置为YES以优化位图的存储。 scale—–缩放因子,[UIScreen mainScreen].scale保持原图分辨率

  • iOS 10打开设置中的指定模块点击前往【==小常识==】

    • 使用url scheme。photos-redirect:// 但这个scheme是私有的,有风险,而且也没有文档阐述怎么传递参数,你可以试一下。 【为通过审核,对 "photos-redirect://" 进行base64编码混淆后再解码】
  • iOS开发之Base64编码与解码点击前往【==安全==】

    • 1>ASCII码是8个二进制位一编码

    • 2>Base64编码是6个二进制位一编码,所以转换成字符串后会比ASCII内容要多

      • 64编码
      - (NSString *)encode:(NSString *)string
      {
          //先将string转换成data
          NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
          
          NSData *base64Data = [data base64EncodedDataWithOptions:0];
          
          NSString *baseString = [[NSString alloc]initWithData:base64Data encoding:NSUTF8StringEncoding];
          
          return baseString;
      }
      
      • 64解码
          - (NSString *)dencode:(NSString *)base64String
        {
            //NSData *base64data = [string dataUsingEncoding:NSUTF8StringEncoding];
      
            NSData *data = [[NSData alloc]initWithBase64EncodedString:base64String options:NSDataBase64DecodingIgnoreUnknownCharacters];
      
            NSString *string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
      
            return string;
        }
      




2018/09/24

  • iOS如何将父视图透明,而内容不透明的方法点击前往 【==小常识==】

    • self.view.backgroundColor = [[UIColor whiteColor]colorWithAlphaComponent:0.7f];
  • iOS开发你可能不知道的细节一:UITextField清空按钮点击前往 【==小常识==】

    • textField.clearButtonMode=UITextFieldViewModeWhileEditing;
    • UITextFieldViewModeNever, 清空按钮永不出现
    • UITextFieldViewModeUnlessEditing, 不编辑的时候出现
    • UITextFieldViewModeAlways 只要输入框有内容就出现
  • 在iOS开发中使用iconfont图标点击前往【==基础知识==】
    使用iconfont的可以达到以下目的

    • 减小应用体积,字体文件比图片要小;
    • 图标保真缩放,解决2x/3x乃至将来nx图问题;
    • 方便更改图标颜色大小,图片复用。
  • iOS开发技巧-国际化(Localization),只看一篇就够了点击前往 【==基础知识==】

    • App名称国际化
    • 图片、文字国际化
    • 强制默认显示某种语言
    • 启动图国际化
    • iOS10所需的权限配置国际化
    • xib/storyboard国际化
  • UIBezierPath介绍 点击前往 【==绘制==】

    • iOS的绘图框架有多种,我们平常最常用的就是UIKit,其底层是依赖CoreGraphics实现的,而且绝大多数的图形界面也都是由UIKit完成,并且UIImage、NSString、UIBezierPath、UIColor等都知道如何绘制自己,也提供了一些方法来满足我们常用的绘图需求。除了UIKit,还有CoreGraphics、Core Animation,Core Image,OpenGL ES等多种框架,来满足不同的绘图要求。各个框架的大概介绍如下:

      • UIKit:最常用的视图框架,封装度最高,都是OC对象
      • CoreGraphics:主要绘图系统,常用于绘制自定义视图,纯C的API,使用Quartz2D做引擎
      • CoreAnimation:提供强大的2D和3D动画效果
      • CoreImage:给图片提供各种滤镜处理,比如高斯模糊、锐化等
      • OpenGL-ES:主要用于游戏绘制,但它是一套编程规范,具体由设备制造商实现

      绘图系统

  • IOS 常用动画的实现方式整理(主讲:CoreAnimation)点击前往【==动画==】





2018/09/23

  • 面向对象设计的六大设计原则(附 Demo 及 UML 类图) 点击前往 【==基础知识==】
缩写 英文名称 中文名称 定义
SRP Single Responsibility Principle 单一职责原则 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
OCP Open Close Principle 开闭原则 一个类只允许有一个职责,即只有一个导致该类变更的原因。
LSP Liskov Substitution Principle 里氏替换原则 针对接口编程,而不是针对实现编程。尽量不要从具体的类派生,而是以继承抽象类或实现接口来实现。关于高层模块与低层模块的划分可以按照决策能力的高低进行划分。业务层自然就处于上层模块,逻辑层和数据层自然就归类为底层。
LoD Law of Demeter ( Least Knowledge Principle) 迪米特法则(最少知道原则) 多个特定的客户端接口要好于一个通用性的总接口。
ISP Interface Segregation Principle 接口分离原则 一个对象应该对尽可能少的对象有接触,也就是只接触那些真正需要接触的对象。
DIP Dependency Inversion Principle 依赖倒置原则 所有引用基类的地方必须能透明地使用其子类的对象,也就是说子类对象可以替换其父类对象,而程序执行效果不变。
  • iOS数组排序(倒叙 生序 降序) 点击前往【==算法==】
    • 倒序 NSMutableArray *temp = [NSMutableArray arrayWithObjects:@"5",@"1",@"4",@"2",nil]; temp = (NSMutableArray *)[[temp reverseObjectEnumerator] allObjects];
    • 升序/ 降序
      • 字符串 sortedArrayUsingSelector
      • 字典 sortedArrayUsingSelector 和 sortedArrayUsingComparator
      • 数据模型 sortedArrayUsingDescriptors 和 sortUsingDescriptors




2018/09/22

  • iOS 中集合遍历方法的比较和技巧 点击前往 【==算法==】
遍历方法 100对象遍历操作(耗时) 1000000对象遍历操作(耗时) 100对象遍历执行一个很费时的操作(耗时)
经典for循环 0.001355 1.246721 1.106567
for in (NSFastEnumeration) 0.002308 0.025955 1.102643
makeObjectsPerformSelector 0.001120 0.068234 1.103965
kvc集合运算符 0.004272 21.677246 N/A
enumerateObjectsUsingBlock 0.001145 0.586034 1.104888
dispatch_apply 0.001380 0.607100 0.554858
  • iOS的几种定时器及区别 点击前往【==定时器==】
  • iOS三种定时器的用法NSTimer、CADisplayLink、GCD 点击前往【==定时器==】
  • iOS定时器,你真的会使用吗?点击前往【==定时器==】
定时器 定义
NSTimer iOS中最基本的定时器,在Swift中称为Timer。其通过RunLoop来实现,一般情况下较为准确,但当当前循环耗时操作较多时,会出现延迟问题。同时,也受所加入的RunLoop的RunLoopMode影响,具体可以参考RunLoop的特性。
CADisplayLink CADisplayLink是基于屏幕刷新的周期,所以其一般很准时,每秒刷新60次。其本质也是通过RunLoop,所以不难看出,当RunLoop选择其他模式或被耗时操作过多时,仍旧会造成延迟。
GCD GCD定时器是dispatch_source_t类型的变量,其可以实现更加精准的定时效果
NSThread(performSelector:afterDelay:)




2018/09/21

  • 如何用最快速度撸个最简单的markdown编辑器 点击前往 【==开发==】

  • iOS 12 中的 Siri Shortcuts 简介 (Siri Shortcuts 是由前 WWDC 奖学金获得者开发的 iOS 自动化应用程序 Workflow 演变而来的。) 点击前往【==框架==】





2018/09/20

  • iPhoneXS 屏幕分辨率终极指南 点击前往 【==定义==】

  • iOS小技巧总结,绝对有你想要的 点击前往【==小常识==】

book-recommended-daily's People

Contributors

ioshuyang avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.