<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[W_C__L的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wang631106979</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wang631106979]]></copyright><item><title><![CDATA[swift脚本编程：一键生成AppIcon]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/78255971</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/78255971</guid><author>wang631106979</author><pubDate>Tue, 17 Oct 2017 00:06:36 +0800</pubDate><description><![CDATA[事前准备
查看swift版本
swift脚本编程小知识
终端输入和输出
输出
输入
在swift脚本中调用其他脚本
开始编写脚本
读取inputpng
生成AppIconappiconset和Contentsjson
生成不同尺寸的image  自从Xcode8之后就不支持插件了，没法用Xcode一键生成AppIcon，一直没找到好的解决方案，一怒之下决定自己写一个脚本用来生成AppIcon，下面是]]></description><category></category></item><item><title><![CDATA[丁香园iOS电话面试问题总结]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/73525528</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/73525528</guid><author>wang631106979</author><pubDate>Wed, 21 Jun 2017 01:35:24 +0800</pubDate><description><![CDATA[简单讲解一下http请求以及GET POST的区别
https的加密方式和几次握手
https的加密方式
加密的详细过程
在不知道二进制文件格式的情况下如何区分文件
常见的几种线程锁
怎么保证线程安全
SDWebImage具体实现和具体类
Alamofire实现原理和主要的类
RxSwift的原理使用和主要类
realm的简单介绍和使用时的线程问题
跨线程时的使用
简单讲一讲RunTime和RunL]]></description><category></category></item><item><title><![CDATA[iOS动画进阶 - 实现炫酷的上拉刷新动效（二）]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/70878119</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/70878119</guid><author>wang631106979</author><pubDate>Thu, 27 Apr 2017 20:41:17 +0800</pubDate><description><![CDATA[最近撸了一个上拉刷新的小轮子，只要遵循一个协议就能自定义自己动效的上拉刷新和加载，我自己也写了几个动效进去，下面是一个比较好的动效的实现过程
先上效果图和github地址，完整代码个demo和进入查看，有其他好的动效大家也可以学习交流~分析动效写一个动效的第一步就应该仔细的去分析它，把它的每一帧展开来看，找一个最合适的方式来实现它，我们可以把以上动画分解成以下三个步骤：
箭头的绘制和动效
圆环的绘制]]></description><category></category></item><item><title><![CDATA[iOS动画进阶 - 实现炫酷的上拉刷新动效]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/62888435</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/62888435</guid><author>wang631106979</author><pubDate>Fri, 17 Mar 2017 15:04:34 +0800</pubDate><description><![CDATA[移动端访问不佳，请访问我的个人博客
  最近撸了一个上拉刷新的小轮子，只要遵循一个协议就能自定义自己动效的上拉刷新和加载，我自己也写了几个动效进去，下面是一个比较好的动效的实现过程
先上效果图和github地址，有其他好的动效大家也可以交流~动效的原地址，在uimovement网站上看到这个动效时感觉特别6，就想自己实现一下，费了很长时间，换了几种方案终于实现出来了，下面是实现的步骤：分析动效写一个]]></description><category></category></item><item><title><![CDATA[手把手教你发布自己的开源框架到CocoaPods]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/62527363</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/62527363</guid><author>wang631106979</author><pubDate>Fri, 17 Mar 2017 00:21:47 +0800</pubDate><description><![CDATA[移动端显示不佳，请访问我的个人博客
  偶尔会发布自己的开源框架到CocoaPods上，但是每次都忘记命令行，写这篇博客的目的是为了记录下来步骤，方便以后翻阅使用
一、先将代码传到github上这步比较简单，大致说一下：// 创建本地仓库
git init
// 添加名称为origin的远程连接
git remote add origin '你的github项目地址'
// 将本地代码加入本地仓库里]]></description><category></category></item><item><title><![CDATA[swift设计模式学习 - 外观模式]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/60957567</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/60957567</guid><author>wang631106979</author><pubDate>Thu, 09 Mar 2017 12:05:25 +0800</pubDate><description><![CDATA[移动端访问不佳，请访问我的个人博客
  设计模式学习的demo地址，欢迎大家学习交流
外观模式外观模式（Facade），为子系统中的一组接口提供一个一致的界面，定义一个高层接口，这个接口使得这一子系统更加容易使用。外观模式的基本实现上图是外观模式的UML图，下面是基本的代码实现过程：//MARK: 外观类
class Facade {
    let one   = SubSystemOne()]]></description><category></category></item><item><title><![CDATA[swift设计模式学习 - 模板方法模式]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/56839688</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/56839688</guid><author>wang631106979</author><pubDate>Fri, 24 Feb 2017 13:59:34 +0800</pubDate><description><![CDATA[移动端访问不佳，请访问我的个人博客
  设计模式学习的demo地址，欢迎大家学习交流
模板方法模式模板方法模式，定义一个操作中算法的骨架，而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式的基本实现上图是基本模板模式的UML图，这种设计模式在很多地方都有用到，下面是基本实现的代码：class AbstractClass {
    func]]></description><category></category></item><item><title><![CDATA[swift设计模式学习 - 代理模式]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/56347584</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/56347584</guid><author>wang631106979</author><pubDate>Tue, 21 Feb 2017 23:47:22 +0800</pubDate><description><![CDATA[移动端访问不佳，请访问我的个人博客
  设计模式学习的demo地址，欢迎大家学习交流
代理模式代理模式为其他对象提供一种代理以控制对这个对象的访问，在某些情况下，一个对象不适合或者不能直接引用另一个对象，而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式的组成
抽象角色：通过接口或抽象类声明真实角色实现的业务方法。
代理角色：实现抽象角色，是真实角色的代理，通过真实角色的业务逻辑方法来实现]]></description><category></category></item><item><title><![CDATA[swift设计模式学习 - 原型模式]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/56021751</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/56021751</guid><author>wang631106979</author><pubDate>Mon, 20 Feb 2017 19:56:55 +0800</pubDate><description><![CDATA[移动端访问不佳，请访问我的个人博客
  设计模式学习的demo地址，欢迎大家学习交流
原型模式用原型实例指定创建对象的种类，并且通过拷贝这些原型创建新的对象。定义用原型实例指定创建对象的种类，并且通过拷贝这些原型创建新的对象。Prototype原型模式是一种创建型设计模式，Prototype模式允许一个对象再创建另外一个可定制的对象，根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给]]></description><category></category></item><item><title><![CDATA[swift设计模式学习 - 策略模式]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/55682131</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/55682131</guid><author>wang631106979</author><pubDate>Sat, 18 Feb 2017 22:03:58 +0800</pubDate><description><![CDATA[策略模式策略模式定义了算法家族，分别封装起来，让它们之间可以相互替换，此模式让算法的变化，不会影响到使用算法的客户。策略模式的组成
抽象策略角色（Strategy）： 策略类，通常由一个接口或者抽象类实现。
具体策略角色（ConcreteStrategy）：包装了相关的算法和行为。
环境角色（Context）：持有一个策略类的引用，最终给客户端调用。
策略模式的基本实现上图是最基本的装饰模式的结构图]]></description><category></category></item><item><title><![CDATA[reason: image not found的解决方案]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/55258478</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/55258478</guid><author>wang631106979</author><pubDate>Thu, 16 Feb 2017 14:39:38 +0800</pubDate><description><![CDATA[在制作framework时遇到真机运行时导致的reason: image not found允许崩溃的问题，下面是我的解决方案：
首先我们分析一下出现这种情况的原因，原因就是framework找不到镜像了，也就是在真机运行是没有找到对应的framework包，在网上找的一些办法将框架引用从Required 变为Optional ，根本就是治标不治本，等到运行到这个framework的代码是也会崩溃，]]></description><category></category></item><item><title><![CDATA[iOS动画进阶 - 手摸手教你写ShineButton动画]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/55230455</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/55230455</guid><author>wang631106979</author><pubDate>Thu, 16 Feb 2017 00:32:35 +0800</pubDate><description><![CDATA[前段时间在github上看见一个非常nice的动画效果，可惜是安卓的，想着用swift写一个iOS版的，下下来源代码研究了一下，下面是我写代码的心路历程
先上图和demo的地址分析动画过程刚开始看的时候感觉这个动画很炫酷，实现起来应该挺复制的，后来我将gif图逐一分解，大致浏览了一下安卓的实现过程，大致了解的实现的过程，下面是一些关键的动画步骤：
第一步是里面图片的缩放动画，使用CALayer配合C]]></description><category></category></item><item><title><![CDATA[swift设计模式学习 - 装饰模式]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/54949898</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/54949898</guid><author>wang631106979</author><pubDate>Thu, 09 Feb 2017 17:46:04 +0800</pubDate><description><![CDATA[移动端访问不佳，请访问我的个人博客装饰模式在不必改变原类文件和使用继承的情况下，动态地扩展一个对象的功能。它是通过创建一个包装对象，也就是装饰来包裹真实的对象。装饰模式的特点
装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。
装饰对象包含一个真实对象的引用（reference）
装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。
装饰对象可以在转]]></description><category></category></item><item><title><![CDATA[iOS开发进阶 - 基于PhotoKit的图片选择器]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/54343860</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/54343860</guid><author>wang631106979</author><pubDate>Wed, 11 Jan 2017 15:21:34 +0800</pubDate><description><![CDATA[移动端访问不佳，请访问我的个人博客
  很早之前就用OC把代码写完了并用在项目中了，一直没时间整理，现在用swift重写一份，并且更加详细的来了解这个Photos框架，下面是我集合苹果官方文档和其他大神的博客写出的一篇关于Photos框架的介绍
老规矩先上效果图和Demo地址：了解Photos框架Photos是ios8出的一个新的图片选择框架，取代之前的AssetsLibrary框架，相比较Asse]]></description><category></category></item><item><title><![CDATA[swift学习笔记 - Range、ClosedRange、CountableClosedRange与CountableRange学习]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/54098910</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/54098910</guid><author>wang631106979</author><pubDate>Thu, 05 Jan 2017 22:21:12 +0800</pubDate><description><![CDATA[在使用swift的过程中字符串操作的时候会用到Range，刚开始使用起来各种别扭，然后发现居然还有ClosedRange、CountableClosedRange和CountableRange，这下就彻底头疼了，下面简单的描述一下它们的区别
从命名来代码来理解和区分
CountableClosedRange：可数的闭区间
CountableRange：可数的开区间
ClosedRange：不可数的闭]]></description><category></category></item><item><title><![CDATA[swift学习笔记 - 判断当前运行的系统和平台]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/53900369</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/53900369</guid><author>wang631106979</author><pubDate>Tue, 27 Dec 2016 23:11:27 +0800</pubDate><description><![CDATA[最近代码需要判断代码运行的系统与平台，下面总结了一下swift下一些可以用来判断的属性：
// 代码运行在32位的 Windows
public var TARGET_OS_MAC: Int32 { get }
// 代码运行在 Mac OS X
public var TARGET_OS_WIN32: Int32 { get }
// 代码运行在某些 Unix(不是OSX)
public var T]]></description><category></category></item><item><title><![CDATA[swift学习笔记 - swift3.0用GCD实现计时器]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/53884399</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/53884399</guid><author>wang631106979</author><pubDate>Mon, 26 Dec 2016 11:01:56 +0800</pubDate><description><![CDATA[swift3.0之后，GCD的语法发生了翻天覆地的变化，从过去的c语法变成了点语法，下面是变化之后用GCD实现计时器的方法：
先贴代码：// 定义需要计时的时间
var timeCount = 60
// 在global线程里创建一个时间源
let codeTimer = DispatchSource.makeTimerSource(queue:      DispatchQueue.global(]]></description><category></category></item><item><title><![CDATA[iOS开发进阶 - 自定义UICollectionViewLayout实现瀑布流布局]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/53793046</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/53793046</guid><author>wang631106979</author><pubDate>Wed, 21 Dec 2016 22:57:50 +0800</pubDate><description><![CDATA[最近项目中需要用到瀑布流的效果，但是用UICollectionViewFlowLayout又达不到效果，自己动手写了一个瀑布流的layout，下面是我的心路路程
先先上效果图与demo地址：因为是用UICollectionView来实现瀑布流的，决定继承UICollectionViewLayout来自定义一个layout来实现一个简单瀑布流的布局，下面是需要重写的方法：
重写这个属性得出UIColl]]></description><category></category></item><item><title><![CDATA[fatal: refusing to merge unrelated histories的解决方案]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/53540081</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/53540081</guid><author>wang631106979</author><pubDate>Fri, 09 Dec 2016 15:52:14 +0800</pubDate><description><![CDATA[最近更新了git版本，发现在github上建立了一个仓库，然后关联本地库的时候pull失败，错误为fatal: refusing to merge unrelated histories，查找后发现解决方案为下：
解决方案：# 将之前的git pull origin master修改为一下代码
git pull origin master --allow-unrelated-histories]]></description><category></category></item><item><title><![CDATA[iOS开发进阶 - 富文本正则替换表情]]></title><link>https://blog.youkuaiyun.com/wang631106979/article/details/53380727</link><guid>https://blog.youkuaiyun.com/wang631106979/article/details/53380727</guid><author>wang631106979</author><pubDate>Mon, 28 Nov 2016 17:20:11 +0800</pubDate><description><![CDATA[移动端访问不佳，请访问我的个人博客
  最近写项目需要用到富文本解析字符串显示表情，下面是我使用正则替换实现富文本的方式，希望能帮助到大家
先上效果图和demo地址实现过程中需要用到的知识点
NSRegularExpression（正则表达式）
NSMutableAttributedString（用来显示富文本的string）
废话不多说，直接贴代码：import UIKitstruct WCLEm]]></description><category></category></item></channel></rss>