自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 OC中的BOOL类型

之前在一次codereview中,被告知下面的写法有问题if (NO == isOK) { ...}BOOL类型的变量不要直接和YES or NO进行比较,这样会出问题。应当直接写成if (!isOK) { ...}当时很困惑,为什么BOOL类型的变量不能和这两个BOOL类型的常量进行比较呢?所以做了以下这番研究。BOOL类型的定义查阅资料后发现OC 中的BOO...

2019-04-08 12:13:17 3064

转载 如何使用Xcode的Targets来管理开发和生产版本的构建

http://www.cocoachina.com/ios/20160331/15832.html

2016-08-01 16:09:14 279

原创 cocoaPods的安装及使用

1. 安装我们可以用淘宝的Ruby镜像来访问cocoapods。按照下面的顺序在终端中敲入依次敲入命令: gem sources --removehttps://rubygems.org///等有反应之后再敲入以下命令 gem sources -a https://ruby.taobao.org/为了验证你的Ruby镜像是并且仅是taobao,可以用以下命令查看: ge

2016-01-07 21:44:01 389

转载 被误解的 MVC 和被神化的 MVVM

被误解的 MVCMVC 的历史MVC,全称是 Model View Controller,是模型 (model)-视图 (view)-控制器 (controller) 的缩写。它表示的是一种常见的客户端软件开发框架。MVC 的概念最早出现在二十世纪八十年代的 施乐帕克 实验室中(对,就是那个发明图形用户界面和鼠标的实验室),当时施乐帕克为 Smalltalk 发明了这种软件

2016-01-03 00:12:29 589

原创 [[UIScreen mainScreen] applicationFrame] 和 [[UIScreen mainScreen] bounds]的区别

[[UIScreen mainScreen] applicationFrame] 打印结果: {{0, 20}, {414, 716}}[[UIScreen mainScreen] bounds] 打印结果: {{0, 0}, {414, 736}}[[UIScreen mainScreen] applicationFrame]不包含状态栏的尺寸

2015-12-25 10:11:44 321

转载 iOS9适配 之 关于info.plist 第三方登录 添加URL Schemes白名单

近期苹果公司iOS 9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。受此影响,当你的应用在iOS 9中需要使用 QQ/QQ空间/支付宝/微信SDK 的相关能力(分享、收藏、支付、登录等)时,需要在“Info.plist”里增加如下代码:  key>LSApplicationQue

2015-12-10 13:46:37 413

原创 Xcode升级后,插件无法工作的问题

在命令行中,输入:find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth 3 | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add `defaults read /Applic

2015-11-14 11:49:26 406

原创 The Swift Pods being used are: Box, ReactiveCocoa, and Result

今天用cocoapod安装ReactiveCocoa时,报以下错误解决方法在pod file中加入 use_frameworks!

2015-11-12 15:24:36 662

原创 Block对捕捉变量的影响

以前只知道block可以捕捉环境中的变量并且会拷贝该变量,但是是深拷贝还是浅拷贝呢?对于这个问题一直很模糊,今天用几个例子来研究一下这个问题。先看个例子1: NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1",@"2", nil]; NSLog(@"之前 - %p", array); void (^bloc

2015-11-11 14:37:33 388

原创 容器对象的深拷贝方法

+ (instancetype)arrayWithArray:(NSArray<ObjectType> *)array;和 - (instancetype)initWithArray:(NSArray<ObjectType> *)array; 产生的对象都是源对象(array)的一份浅拷贝。以下这个方法能对源对象进行深拷贝,flag传YES即可- (instancetype)initWithAr

2015-10-26 00:25:48 752

原创 UICollectionViewFlowLayout has cached frame mismatch for index path

在升级XCode7.0使用UICollectionViewLayout进行自定义布局时,调试台会出现以下的警告打印。 UICollectionViewFlowLayout has cached frame mismatch for index path {length = 2, path = 0 - 0} - cached value: {{122, 15}, {170, 170}}; exp

2015-10-25 11:07:01 1897 1

转载 从一个xib文件中加载另一个xib文件

在开发中,经常会用到一个需要重复使用的模块,比如好友列表中每个用户的展示或每条动态,这些都是相同的模版,这样我们就可以把这个部分提取出来放到一个单独的.xib中。那么提取出的.xib如何在其他.xib中使用呢?接下来就说一下如何在.xib中加载其他的.xib。大概结构是这样的: 创建项目,项目名称叫CompositeXib 创建MainView和ChildView,Chil

2015-10-21 11:19:12 1591

原创 CALayer - mask 图层遮罩

中间的就是mask(遮罩), 当左边的原始图片和mask进行复合时,原始图片会按照mask的渲染方式对图层渲染。从左到右mask透明度越来越高,原始图片则也是从左到右透明度越来越高,最后合成的图片如右图。 注意:mask的黑色只是用来表示透明度的,并不会对原始图片造成任何颜色的干扰。换成其他颜色也是可以的。- (void)viewDidLoad { [super viewDidLoad];

2015-10-12 11:15:22 3516

原创 多按钮同时按下的处理

在项目开发过程中,有时一个界面上的多个按钮的响应逻辑之间是有冲突的,如果同时按下会造成一下混乱。正常操作当然不会有这样的事情,但免不了有些用户恶作剧。为了避免恶作剧可以设置UIView的一个属性为YES。@property(nonatomic,getter=isExclusiveTouch) BOOL exclusiveTouch;这样在同一时间内,只会有一个按钮响应事件了。

2015-10-09 15:14:59 985

转载 升级到OSX10.11后cocopods不正常的问题

pod install 报错: -bash: pod: command not found原因 :EI Capitan大概好像是cocoapod应该装到另外一个路径才能使用.打开命令行工具,输入 sudo gem install -n /usr/local/bin cocoapods然后CocoaPods就正常了

2015-10-08 12:05:28 360

原创 OC 四舍五入

(NSInteger)round(2.4) –> 2 (NSInteger)round(2.5) –> 3

2015-10-06 22:40:06 1527

原创 长按移动cell

前言: 之前见过瀑布流中的cell,由手势拖动变换位置的效果,一直觉得很炫很神奇。今天无意在破船之家看到了这种效果的实现方法。最核心的位置变换只需掉俩个方法,然后由系统完成。所以很简单,没有想象中的那么复杂。我们先从简单的Tableview开始。 效果如下 实现过程给tableview添加长按手势。在手势开始时,获取选中的cell,对cell截图。cell隐藏,截图的frame和cell的f

2015-09-29 18:24:32 525

原创 折叠效果实现

在进入正文前,想说明些事,之前写博客的目的主要是给自己做个笔记,方便以后的回顾。所以,有些博客没有写出处。我最近的关于动画交互的博客,大都是从这个博客(杨骑滔博客地址)上学习到的。他还是个学生,但是却立志要做出最棒的用户交互,博主真心佩服。 我的博客中是自己对实践过程的体会和一些总结,但由于博主才疏学浅,如果读者不是很明白可以到他的博客上学习。以后每篇文章都会贴出链接。这篇的链接 这就是要

2015-09-21 17:57:09 752

原创 iOS7自定义视图控制器过渡4-自定义手势过渡动画

前言:之前三篇中,手势过渡动画都是直接使用事件动画的,其实我们可以使用代理方法自定义手势动画。在上一篇列子的基础上,重新定义一个手势交互动画对象。正文: 最终效果: 由于Push和Pop时的事件动画和上篇都一样,这里着重看手势交互动画。分析动画实现策略—> 过渡开始前,在SecondViewController中的大图上添加一个拖拽手势。 —> 过渡开始时,对SecondViewControl

2015-09-08 17:59:11 746

原创 iOS7自定义视图控制器过渡3-关于Push和Pop的过渡

前言:在之前的俩篇中,很多人可能发现我们一直在用模态的方式转换控制器,但是在开发过程中大多数情况下是用导航控制器来管理自己的视图控制器的。那么在Push或Pop的时候怎么实现过渡效果呢?其实很简单,和之前的基本一样,只是返回事件动画对象和手势交互动画对象的代理方法不一样了(此时是UINavigationControllerDelegate中的方法)仅此而已。那么,举个例子来练习一下吧。正文: Pu

2015-09-08 15:04:54 760

原创 iOS7自定义视图控制器过渡2-手势交互过渡

前言:今天会在上一篇的例子的基础上扩充手势交互过渡。手势交互过渡和事件过渡的实现方法差别不大,只需在代理方法中返回一个手势交互过渡动画对象,主要差别就是这个动画对象的实现上,这个动画对象遵守的是UIViewControllerInteractiveTransitioning协议,而不再是 UIViewControllerAnimatedTransitioning。原因在于事件过渡的过程是时间的函数

2015-09-07 18:27:35 760

原创 iOS7自定义视图控制器过渡1-动作过渡

前言:视图控制器的过渡是发生在俩个视图控制器切换的过程中,在这一时间段内,我们利用SDK中提供的方法做出炫目的动画,提高用户体验。自定义视图控制器过渡分为两种:动作事件过渡和手势交互过渡。这篇中先介绍简单点的动作事件过渡,手势交互在下一篇中介绍。正文:现在我们举个列子来介绍实现动作事件过渡的方法。我们先创建俩个视图控制器,一个叫ViewController(蓝色的那个),一个叫

2015-09-07 00:50:45 468

原创 类别和类扩展的区别

类扩展形式上可以看做是匿名类别,括号里面是空的。例如:objectTest()区别:1. 类扩展声明必须在@implementation在实现。2. 类扩展可以为类添加新的属性,但是类别不可以。3. 类别和类扩展都可以为类添加新的方法,但是类别如果只声明方法不实现,不会有警告出现。类扩展添加的方法是一个required方法,不实现会有警告出现。

2015-08-18 23:20:27 598

原创 NAarray sortedArrayUsingComparator 排序方法的使用

NSArray *array = @[@"d",@"a",@"c",@"z",@"e"];        NSArray *resultArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {        NSString *str1 = obj1;        NSString *str

2015-07-30 14:25:01 1923

转载 NSUserDefaults的registerDefaults方法解析

NSUserDefaults还提供了一个registerDefaults方法,通常在appDelegate的didFinishLaunchingWithOptions里调用(BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions {

2015-06-30 23:20:03 1202

转载 Background Fetch

http://joeyio.com/ios/2013/10/27/background-fetch/

2015-06-30 23:07:49 312

原创 全局变量和全局静态变量的区别

1)全局变量是不显式用static修饰的全局变量,全局变量默认是有外部链接性的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量。 2)全局静态变量是显式用static修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用extern声明也不能使用。// Book.hNSString *const bookName =

2015-06-30 22:24:49 1648

转载 CocoaPods更新方法

$ sudo gem update --system // 先更新gem,国内需要切换源$ gem sources --remove https://rubygems.org/$ gem sources -a http://ruby.taobao.org/$ gem sources -l\*\*\* CURRENT SOURCES \*\*\*http://ruby.taobao.org/

2015-06-30 21:15:38 226

原创 load和initialize的不同

#import "Constants.h" @implementation Constants + (void)initialize{ NSLog(@"init constants >>>>>>>>>>"); } + (void)load{ NSLog(@"load constants >>>>>>>>>>"); } @end load,是加载类的时候,这里

2015-06-15 09:59:50 326

原创 AVAudioPlayer和MPMusicPlayerController的区别

AVAudioPlayer is able to play one song at a time. It cannot access iPod Library means you cannot play songs which are present in user’s iPod’s Library. But biggest advantage I see is AVAudioPlayer can

2015-06-12 11:39:41 540

原创 SQL语句(一)

学习SQLite数据库之前一定要了解SQL语句。一、SQL语句的特点 1. 不区分大小写; 2. 以;(分号)结尾。二、SQL语句种类: 1. 数据定义语句(DDL:Data Definition Language) 包括建表(create)和删表(drop)操作。数据操作语句(DML:Data Manipulation Language) 包括数据插入(insert)、删除(delet

2015-06-08 22:53:34 344

原创 iOS 事件传递

事件传递过程: UIApplication —> UIWindow —> UIWindow的子控件。 从UIWindow开始,所有的UI控件会依据父子关系逐层寻找各自合适的View,最终找到一个最合适的view,将事件交给这个view处理。合适的View的标准 1) 能接收触摸事件。 2)触摸点在自己身上。 第2点很容易明白,但是第1点有点模糊,一个view怎样才能接收触摸事件呢,其实只

2015-06-02 23:27:41 256

原创 正则表达式初级使用

一般从 需要匹配的字符、匹配字符的位置、匹配数量 3个方面就能从源串中找到自己想要的字符串。如何匹配字符: 1) 普通字符,直接写。eg :hi, 8。 2) 某种字符: \d : 匹配数字。 \w : 匹配字母或数字或下划线或汉字。 \s :匹配任意的空白。 . : 匹配任意字符。 3)特殊字符(比如元音字母a,e,i,o,u): [] : 表示括号中的某个字符

2015-05-31 11:41:42 340

原创 由xib创建的类,被继承后的问题

一直听说xib创建的文件不能被继承,但不知道为什么。今天研究了一下,我认为xib被继承的最大问题是:当子类创建实例时,是从xib中获取的,而从xib中获取的对象一定是和该xib文件关联的类的对象。也就是说子类根本没有创建出自己的实例,而是父类的实例。这样的话,虽然在子类中能够调用到父类的公有方法,但是根本无法重写父类的方法,因为根本没有子类的实例去调用重写的方法。看代码:// 继承关系@inter

2015-05-29 16:21:35 2628

原创 UIAppearance和UIAppearanceContainer的作用

一、 UIAppearance和UIAppearanceContainer的作用 从iOS 5开始,苹果通过两个协议(UIAppearance和UIAppearanceContainer)规范了对许多UIKit控件定制的支持。所有遵循UIAppearance协议的UI控件通过定制都可以呈现各种外观。不仅如此,UIAppearance协议甚至允许开发者基于控件所属的区域指定不同的外观。也就是说,当某

2015-05-29 12:03:23 1484

原创 打印数组时显示中文

给数组添加一个分类.代码如下:- (NSString *)descriptionWithLocale:(id)locale{ NSMutableString *strM = [NSMutableString string]; [strM appendFormat:@"(address : %p\n", self]; for (id obj in self) {

2015-05-29 12:02:41 338

原创 去除字符串中的空格

1.去掉两端的空格[str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] //stringByTrimmingCharactersInSet: 是将字符串str和集合共同的部分,从str中剪掉。2.去掉多余的空格NSString *str = @" this i

2015-05-29 12:00:56 752

原创 监听Array数组内容变化

定义一个类@interface KVOMutableArray : NSObject@property (nonatomic, strong)NSMutableArray *array;@end@implementation KVOMutableArray- (instancetype)init { if (self = [super init]) { self.ar

2015-05-29 11:58:32 885

原创 改变TableView右侧指示条的颜色

// 改变tableView搜索条的颜色- (void)changeTableViewIndexBarColor { for (UIView *subView in self.tableView.subviews) { if ([subView isKindOfClass:[UIControl class]]) { subView.tintColor

2015-05-29 11:54:21 289

原创 属性之间的依赖观察

使用场景: 例如用户有一个fullName属性,此属性被其他观察者观察。它需要依赖firstName和lastName属性。也就是说当用户设置firstName或者lastName的时候,它的fullName观察者需要得到通知。 这里强调的是多个属性的修改都会影响某一个属性,多改对一改,这里采用的一种依赖机制,fullName属性依赖多个key,用户只需要告诉KVO框架是如何依赖的即可。如何建

2015-05-29 11:54:01 618

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除