<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Japho]]></title><description><![CDATA[世间万物皆对象，属性方法和变量。个人博客：https://japho.top]]></description><link>https://blog.youkuaiyun.com/japhoo</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; japhoo]]></copyright><item><title><![CDATA[iOS PDFKit 开发指北]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/84336836</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/84336836</guid><author>japhoo</author><pubDate>Thu, 22 Nov 2018 11:54:19 +0800</pubDate><description><![CDATA[前言
2017年夏天，在苹果全球开发者大会（WWDC）上，苹果公司终于推出了针对于 iOS 的 PDFKit 支持。PDFKit 自从 MacOS 10.4 以来一直在 AppKit for MacOS 中。但 UIKit 却迟迟得不到支持，尽管苹果公司之前在 iBooks 和 Mail 中使用过 PDFKit ， 但是该框架并未向开发人员开房。
PDFKit 包含了大量关于 PDF 相关的功能，...]]></description><category></category></item><item><title><![CDATA[优雅的动画实现方案SVGA、Lottie]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/83791612</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/83791612</guid><author>japhoo</author><pubDate>Tue, 06 Nov 2018 17:57:43 +0800</pubDate><description><![CDATA[前言
在开发APP的过程中，需要在APP中实现设计同学的UE效果动画，一般都是通过代码实现的，当对于较复杂的动画时，例如直播中刷礼物时的动画，这时利用代码实现会比较复杂。而且Android和iOS两端不好统一效果，如果用gif图片来实现的话，在图片大小和动画帧数之间很难权衡。而且会导致内存吃紧。为了解决这样的问题，今天来介绍两款实现复杂动画的开源库：Lottie和SVGA。
Lottie

Lot...]]></description><category></category></item><item><title><![CDATA[iOS Widget的简单实现]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/79547874</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/79547874</guid><author>japhoo</author><pubDate>Tue, 13 Mar 2018 22:15:22 +0800</pubDate><description><![CDATA[
  自iOS8之后，苹果支持了扩展（Extension）的开发，开发者可以通过系统提供给我们的扩展接入点 (Extension point) 来为系统特定的服务提供某些附加的功能。今年iOS10的推出，让Widget扩展应用渐渐的火了起来，地位得到重大的提升，从这也可以看出苹果对他的重视，今天我们就来一起学习下Widget，来实现一个简单的扩展程序。






程序效果





创建Widg...]]></description><category></category></item><item><title><![CDATA[iOS枚举（位移枚举）]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/52881896</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/52881896</guid><author>japhoo</author><pubDate>Fri, 21 Oct 2016 11:53:05 +0800</pubDate><description><![CDATA[什么是枚举在程序设计语言中，一般用一个数值来代表某一状态，这种处理方法不直观，易读性差。如果能在程序中用自然语言中有相应含义的单词来代表某一状态，则程序就很容易阅读和理解。也就是说，事先考虑到某一变量可能取的值，尽量用自然语言中含义清楚的单词来表示它的每一个值，这种方法称为枚举方法，用这种方法定义的类型称枚举类型。枚举的命名定义的枚举类型名称通常与项目的类文件前缀相同，或者是类库框架缩写,或者跟随具]]></description><category></category></item><item><title><![CDATA[iOS设计模式——单例模式(Singleton)]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/52094592</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/52094592</guid><author>japhoo</author><pubDate>Tue, 02 Aug 2016 15:29:11 +0800</pubDate><description><![CDATA[一、何为单例模式

单例模式：保证一个类只有一个实例，并提供一个访问它的全局访问点。

单例模式几乎是设计模式的最简单形式了。这一模式的意图是使得类的一个对象成为系统中的唯一实例。要实现这一点，可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制，“阻止”所有想要生成对象的访问。我们可以用工厂方法来限制实例化过程。这个方法应该是个静态方法(类方法)，因为让类的实例]]></description><category></category></item><item><title><![CDATA[UIButton中imageView和titleLabel的位置调整]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/52064528</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/52064528</guid><author>japhoo</author><pubDate>Fri, 29 Jul 2016 14:44:49 +0800</pubDate><description><![CDATA[在使用UIButton时，有时候需要调整按钮内部的imageView和titleLabel的位置和尺寸。在默认情况下，按钮内部的imageView和titleLabel的显示效果是图片在左文字在右，然后两者紧挨在一起构成组合居中显示。如下图：

我们可以使用setImageEdgeInsets:和setTitleEdgeInsets:方法来调整两者的位置。在使用这两个方法之前，我们首先要将im]]></description><category></category></item><item><title><![CDATA[Xcode去除版本控制]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/51837630</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/51837630</guid><author>japhoo</author><pubDate>Wed, 06 Jul 2016 11:44:17 +0800</pubDate><description><![CDATA[点击左上角工具栏
 Xcode －> preference 选择 sorce control 一栏，去掉Enable source control 的勾勾]]></description><category></category></item><item><title><![CDATA[iOS 自定义常见第三方分享]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/51220473</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/51220473</guid><author>japhoo</author><pubDate>Fri, 22 Apr 2016 15:16:29 +0800</pubDate><description><![CDATA[d
平时经常会遇到做第三分享的需求，相信大家好多都使用的集成的分享平台shareSDK、友盟分享等。他们其实是对各种第三方平台进行了二次封装，有时需求只要求做其中一种平台的分享的时候其实像shareSDK这种集成环境就有些显得比较冗余了，因为他集成了很多的平台，用户可自定义程度不高，使得自己的程序会变得很臃肿，今天就把自己的干货拿出来，来讲一讲自定义的第三方分享。
下面主要讲一下目前应用比较广]]></description><category></category></item><item><title><![CDATA[iOS 开源项目及第三方库汇总]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/51206124</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/51206124</guid><author>japhoo</author><pubDate>Thu, 21 Apr 2016 09:47:15 +0800</pubDate><description><![CDATA[UI

下拉刷新

EGOTableViewPullRefresh – 最早的下拉刷新控件。SVPullToRefresh – 下拉刷新控件。MJRefresh – 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能。可以自定义上下拉刷新的文字说明。具体使用看“使用方法”。 （国人写）XHRefreshControl – XHRefres]]></description><category></category></item><item><title><![CDATA[iOS UILabel垂直居中]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/51203091</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/51203091</guid><author>japhoo</author><pubDate>Wed, 20 Apr 2016 18:24:07 +0800</pubDate><description><![CDATA[平时开发的时候可能会遇到这种问题：当一个UILabel的frame的高度设置的过大时，发现UILabel是垂直居中的，有的需求是需要将这个Label垂直向上显示，之前的办法是计算出label.text的字体所占用的frame大小，根据这个大小再重新设置label的frame值，未免有些麻烦，前阵子封装了个自定义label实现的垂直居中的设置。废话不多说，上代码。
//
//  JFLabel.h]]></description><category></category></item><item><title><![CDATA[runtime OC类执行顺序]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/51201918</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/51201918</guid><author>japhoo</author><pubDate>Wed, 20 Apr 2016 16:26:45 +0800</pubDate><description><![CDATA[一、runtime如何实现？


OC这个语言尽可能的将一些决定从编译器推迟到运行时，他会尽可能的动态处理事情，这意味着这个语言不仅需要一个编译器，还需要一个运行时系统，使得这个语言得以运行。
RunTime简称运行时。就是系统在运行的时候的一些机制，其中最主要的是消息机制。对于C语言，函数的调用在编译的时候会决定调用哪个函数（ C语言的函数调用请看这里 ）。编译完成之后直接顺序执行，无任]]></description><category></category></item><item><title><![CDATA[使用Block需注意的问题]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/51201863</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/51201863</guid><author>japhoo</author><pubDate>Wed, 20 Apr 2016 16:23:21 +0800</pubDate><description><![CDATA[1、block中引用外部变量
block中引用外部变量时，通常会把对象当做常量变量编码到block中，并且在block中尝试改变外部变量的值会报错，解决办法是引入__block标识符，需要在block内部修改的变量标识为__block scope


2、block自身的内存管理
block本身是像对象一样可以retain，和release。但是，block在创建的时候，它的内存是分配在]]></description><category></category></item><item><title><![CDATA[iOS UIButton传递多个参数的方法——使用关联函数]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/51201161</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/51201161</guid><author>japhoo</author><pubDate>Wed, 20 Apr 2016 15:25:31 +0800</pubDate><description><![CDATA[在平时开发时经常会要遇到通过button的绑定值来做逻辑处理以区分不同的button，通常使用tag来区分，但是当需要传多个值的时候这就比较麻烦了，通常考虑用全局变量来传值，今天来介绍另一种给UIButton传值的方法——关联函数。下面来简单介绍下关联。


关联
关联是指把两个对象相互关联起来，使得其中的一个对象作为另外一个对象的一部分。

关联特性只有在Mac OS X V10.6]]></description><category></category></item><item><title><![CDATA[iOS delegate、notification、KVO如何选择]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/51200867</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/51200867</guid><author>japhoo</author><pubDate>Wed, 20 Apr 2016 14:58:44 +0800</pubDate><description><![CDATA[在开发ios应用的时候，我们会经常遇到一个常见的问题：在不过分耦合的前提下，controllers间怎么进行通信。在IOS应用不断的出现三种模式来实现这种通信：
1.委托delegation；
2.通知中心Notification Center；
3.键值观察key value observing，KVO
因此，那为什么我们需要这些模式以及什么时候用它以及什么时候不用它。
下面来讨论这三]]></description><category></category></item><item><title><![CDATA[iOS开发调整UILabel的行间距]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/51199428</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/51199428</guid><author>japhoo</author><pubDate>Wed, 20 Apr 2016 11:40:37 +0800</pubDate><description><![CDATA[最近再做一个项目时，发现UILabel中text的系统默认行间距不能满足要求，于是在网上找到了调整行间距的代码。跟大家分享一下，希望能对你有所帮助。


CGFloat heih = 20;

NSString * cLabelString = @"这是测试UILabel行间距的text。这是测试UILabel行间距的text。n 这是测试UILabel行间距的text。n 这是测试UILa]]></description><category></category></item><item><title><![CDATA[如何查找当前的第一响应者]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/51199266</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/51199266</guid><author>japhoo</author><pubDate>Wed, 20 Apr 2016 11:25:59 +0800</pubDate><description><![CDATA[有时候总是有需求来获取当前的第一响应者，例如让TextField收键盘，隐藏视图等等操作都需要获取当前的第一响应者，那么该如何获取呢？


UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView *firstResponder = [keyWindow performSelector:@selec]]></description><category></category></item><item><title><![CDATA[Mac OS X 如何查看隐藏文件]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/51199196</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/51199196</guid><author>japhoo</author><pubDate>Wed, 20 Apr 2016 11:19:55 +0800</pubDate><description><![CDATA[在 Mac 文件的文件名前添加 . 即可使文件隐藏
也可以在终端里面能用命令来控制
显示Mac隐藏文件的命令：defaults write com.apple.finder AppleShowAllFiles YES
隐藏Mac隐藏文件的命令：defaults write com.apple.finder AppleShowAllFiles NO

命令运行后需要按 Command Op]]></description><category></category></item><item><title><![CDATA[iOS 微博第三方登录的简单实现]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/51198479</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/51198479</guid><author>japhoo</author><pubDate>Wed, 20 Apr 2016 10:21:35 +0800</pubDate><description><![CDATA[一、下载微博SDK
微博SDK的官方github ： https://github.com/sinaweibosdk/weibo_ios_sdk
下载所需要的SDK
二、集成SDK
下载后的SDK文件结构如下：
              
将这个文件夹拖拽到你所要添加的工程中。
三、引入依赖库及相关设置

如图点击添加依赖库




所需依赖库：
QuartzCor]]></description><category></category></item><item><title><![CDATA[iOS 判断当前viewcontroller是push还是present的方式显示]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/51190844</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/51190844</guid><author>japhoo</author><pubDate>Tue, 19 Apr 2016 15:23:47 +0800</pubDate><description><![CDATA[通过presentviewcontroller的方式显示的viewcontroller不会存入self.navigationController.viewControllers数组中。而通过push方式显示的viewcontroller会存在该数组的最后。

代码如下：    NSArray *viewcontrollers = self.navigationController.viewCo]]></description><category></category></item><item><title><![CDATA[iOS 微信第三方登录的简单实现]]></title><link>https://blog.youkuaiyun.com/japhoo/article/details/51161983</link><guid>https://blog.youkuaiyun.com/japhoo/article/details/51161983</guid><author>japhoo</author><pubDate>Fri, 15 Apr 2016 15:19:22 +0800</pubDate><description><![CDATA[一、下载微信SDK


微信开放平台 https://open.weixin.qq.com





二、导入SDK


导入SDK，并添加依赖库


               
三、配置URL scheme
在Xcode中，选择你的工程设置项，选中“TARGETS”一栏，在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程]]></description><category></category></item></channel></rss>