iOS开发集锦
文章平均质量分 75
在iOS开发中,所解决的实际问题
Bannings
对代码有洁癖,致力于写出优雅的代码,在多个公司负责过 iOS 架构,熟悉设计模式,热衷产品设计与交互,业余时间担任 CSDN iOS 版块版主。
我喜欢现代化的生活,日新月异,科技发达,也带着我快速地成长进步。同时我也喜欢追求细致,品味生活,把学到的语言都能写的更优雅,细腻,像诗一样。用动态的心去学习,用静态的心去写。路漫漫其修远兮,吾将上下而求索。
展开
-
如何设计一个 iOS 控件?(iOS 控件完全解析)
> 代码的等级:可编译、可运行、可测试、可读、可维护、可复用---# 前言一个控件从外在特征来说,主要是封装这几点:> * 交互方式* 显示样式* 数据使用对外在特征的封装,能让我们在多种环境下达到 PM 对产品的要求,并且提到代码复用率,使维护工作保持在一个相对较小的范围内;而一个好的控件除了有对外一致的体验之外,还有其内在特征:> * 灵活性* 低耦合* 易拓展* 易维护原创 2015-05-25 11:35:22 · 41489 阅读 · 30 评论 -
用 Houston 在本地调试远程通知
Houston 的背景Houston 在 GitHub 上的地址:https://github.com/nomad/Houston,作者又是Mattt Thompson,简直是惨无人道啊,又高产,又有质量Houston 能让我们在本地、甚至终端很方便的调试远程通知。安装首先在终端安装:$ gem install houston我第一次安装的时候报了错,但是第二次就安装成功了:...Installi原创 2015-05-03 02:04:07 · 6990 阅读 · 1 评论 -
仿网易云音乐的播放进度条
仿网易云音乐的播放进度条,有三种状态:播放、暂停和拖动,只是实现了动画和主要的交互逻辑,其他细节(如暂停音乐的播放等)还需要自己完善:DKPlayerBar 是继承于UIControl的,如果想获取播放\暂停的事件建议用标准的addTarget方法:[playerBar addTarget:self action:@selector(playOrPause) forControlEvents:UIC原创 2015-05-02 16:00:23 · 14866 阅读 · 1 评论 -
Swift 绘图板功能完善以及终极优化
转载请注明出处:http://blog.csdn.net/zhangao0086/article/details/45289475。 前文总结接着这篇:Swift 全功能的绘图板开发,虽然在上一篇中我们已经完成了这些功能:支持铅笔绘图(画点)支持画直线支持一些简单的图形(矩形、圆形等)做一个真正的橡皮擦能设置画笔的粗细能设置画笔的颜色能设置背景色或者背景图但是还有一个非常重要的功能没原创 2015-04-30 23:45:13 · 10222 阅读 · 5 评论 -
TestFlight Beta 备忘
用iTunes Connect提供的TestFlight功能可以确保我们在设备上测试的版本和App Store上将要发行的版本是同一个。 TestFlight仅支持iOS 8及后续版本,并且需要从App Store里安装TestFlight app。 分为内部测试和外部测试两种: 内部测试 每个应用最多25位测试者,需要把测试者的Apple ID添加到开发者账号里,苹果为会测试者创建一个iT原创 2015-04-07 13:30:36 · 5703 阅读 · 0 评论 -
Swift 全功能的绘图板开发
转载请注明出处:http://blog.csdn.net/zhangao0086/article/details/43836789。 要做一个全功能的绘图板,至少要支持以下这些功能:支持铅笔绘图(画点)支持画直线支持一些简单的图形(矩形、圆形等)做一个真正的橡皮擦能设置画笔的粗细能设置画笔的颜色和填充颜色能设置背景色或者背景图…我们先做一些基础性的工作,比如创建工程。 工程搭建原创 2015-03-29 21:20:44 · 23162 阅读 · 25 评论 -
Swift Core Data 图片存储与读取Demo
实体的模型定义: 实体的class定义:@objc(ImageEntity)class ImageEntity: NSManagedObject { @NSManaged var imageData: NSData}存储:@IBAction func saveImageToCoreData() { let delegate = UIApplication.sharedAppli原创 2015-03-20 23:08:37 · 15245 阅读 · 0 评论 -
Swift Nullability and Objective-C
通过Bridging-Header文件,Swift可以与Objective-C无缝调用,但是Swift与Objective-C有一个很大的不同点:Swift支持Optional类型。比如NSView和NSView?,在Objective-C里对此只有一种表示,即NSView *,既可以用来表示该View为nil、也能表示为非nil,此时Swift编译器是无法确定这个NSView是不是Optional类型的原创 2015-03-18 18:59:51 · 8915 阅读 · 4 评论 -
FMDB 在多线程中的使用
在App中保持一个FMDatabaseQueue的实例,并在所有的线程中都只使用这一个实例。[FMDatabaseQueue databaseQueueWithPath:path]FMDatabaseQueue虽然看似一个队列,实际上它本身并不是,它通过内部创建一个Serial的dispatch_queue_t来处理通过inDatabase和inTransaction传入的Blocks原创 2015-03-12 16:05:50 · 27589 阅读 · 6 评论 -
iOS Core Data的returnsObjectsAsFaults属性
这个属性是用来做优化的,但是有时候反而会降低性能,我跟你打个简单的比方,假如你有一个Department对象,它和Employee对象是一对多的关系(比如一个部门有100个员工),当你加载Department的时候,它包含的所有Employee也被加载了,此时如果returnsObjectsAsFaults为YES,则员工们不会被添加到内存中。原创 2015-03-08 10:15:29 · 7222 阅读 · 0 评论 -
iOS id类型的方法调用
用id类型调用了count方法,此时编译器会遍历所有的可见头的count方法,编译器当然会找到多个定义,因为count方法在NSArray,NSSet等等这些类上也有实现,而且我的TestCounter的count方法返回的是一个TestCounter对象,这和NSArray,NSSet等的count方法返回NSUInteger类型不一样,所以编译器会给你一个异常。原创 2015-03-08 09:43:01 · 20550 阅读 · 0 评论 -
让Xcode自动更新Build版本
我们每天都要打包给测试,每天都要改Build比较麻烦,幸运的是可以通过Shell脚本来省略这个过程。在Xcode工程里选择对应的Target,在Build Phases里点击“New Run Script Phases”原创 2015-02-03 17:36:08 · 13714 阅读 · 1 评论 -
iOS8 用UITableViewRowAction实现Cell自定义滑动操作
在iOS 8以前,如果想自定义一个UITableViewCell的滑动操作是一件比较麻烦的事情,系统只支持删除,如果我们想加上一个类似于“置顶”的操作需要处理不少逻辑,而进入iOS 8以后,系统提供了UITableViewRowAction以及新的delegate方法,使得自定义一些操作变得非常容易,如果想加上一个置顶,只需要这样原创 2015-01-25 21:48:44 · 18080 阅读 · 4 评论 -
iOS 7、iOS 8屏幕适配
在iOS 8中,[UIScreen bounds] 、[UIScreen applicationFrame] 、Status bar、Keyboard这些frame都是根据设备真实方向来返回frame的,而在iOS 7中,不过是横屏还是竖屏,iOS总是返回竖屏的frame原创 2015-01-20 13:24:00 · 24129 阅读 · 1 评论 -
iOS 代码格式化管理
虽然在项目创建和团队组建的初期,我们就把公共约定以及一些规范定下来了,并且由于我们的代码是通过Git来做版本控制的,web上直接就支持Markdown格式的readme文件,可以随时看到最新的版本,但是这种规范只能依靠个人的意识,或者通过代码Review来解决,而且做代码Review的时候,你也不好意思总是写上一堆诸如“这里要加个空格”、“那里要加上换行”的评论吧?如果不管,久而久之,会因为每个人的习惯不同,代码呈现出多种风格,看起来也不像一个成熟团队做出来的产品。原创 2015-01-19 13:47:28 · 15428 阅读 · 24 评论 -
去掉UIWebView底部的黑条
UIWebView底部的黑条很难看,特别是在底部还有透明控件的时候,隐藏的做法其实很简单,只需要将opaque设为NO,背景色设为clearColor即可。原创 2015-01-05 17:12:02 · 22770 阅读 · 0 评论 -
DKTabPageViewController
DKTabPageViewController是一个UIViewController的子类,其基于Child ViewController管理多个页面,支持手动滚动,以及是否显示顶部的Tab等。每一个Tab对应一个UIViewController实例,与其他的Tab相互独立,View支持懒加载及viewWillAppear、viewWillDisappear等方法。原创 2014-12-12 14:47:31 · 4927 阅读 · 0 评论 -
DKTagCloudView
一个iOS上的标签云view,能生成随机的、不重叠的坐标,有一定的定制性原创 2014-11-19 10:15:56 · 3997 阅读 · 2 评论 -
DKCarouselView
DKCarouselView是一个自动的、无限循环滚动的View,支持按时自动滚动和暂停,通过block回调用户点击事件。原创 2014-11-13 23:22:55 · 5603 阅读 · 0 评论 -
Framework的创建与合并
由于.a不能单独使用,必须要配合.h头文件,而且没有包含资源文件,所以用.framework就是更好的选择了。原创 2014-11-02 14:53:59 · 11022 阅读 · 0 评论 -
DKTextField
一个支持明暗码切换的TextField。由于系统的UITextField在切换到暗码时会清除之前的输入文本,于是就有了DKTextField,DKTextField继承于UITextField,并且不影响UITextField的Delegate。原创 2014-10-31 12:55:13 · 3841 阅读 · 0 评论 -
DKMessageView
一个用UICollectionView实现的滚动切换控件,每一页显示的内容可以用UICollectionViewCell自定义:原创 2014-10-29 21:12:39 · 4059 阅读 · 0 评论 -
iOS8 Core Image In Swift:视频实时滤镜
Core Image是一个很强大的框架。它可以让你简单地应用各种滤镜来处理图像,比如修改鲜艳程度, 色泽, 或者曝光。 它利用GPU(或者CPU)来非常快速、甚至实时地处理图像数据和视频的帧。并且隐藏了底层图形处理的所有细节,通过提供的API就能简单的使用了,无须关心OpenGL或者OpenGL ES是如何充分利用GPU的能力的,也不需要你知道GCD在其中发挥了怎样的作用,Core Image处理了全部的细节。本文将会使用AVFoundation框架做些全局或局部的实时滤镜效果,并支持单张照片的拍摄或录制视原创 2014-09-28 17:10:36 · 31813 阅读 · 25 评论 -
iOS8 Core Image In Swift:人脸检测以及马赛克
Core Image是一个很强大的框架。它可以让你简单地应用各种滤镜来处理图像,比如修改鲜艳程度, 色泽, 或者曝光。 它利用GPU(或者CPU)来非常快速、甚至实时地处理图像数据和视频的帧。并且隐藏了底层图形处理的所有细节,通过提供的API就能简单的使用了,无须关心OpenGL或者OpenGL ES是如何充分利用GPU的能力的,也不需要你知道GCD在其中发挥了怎样的作用,Core Image处理了全部的细节。本文将会提到人脸检测以及简单的马赛克处理。原创 2014-09-20 09:43:49 · 23874 阅读 · 13 评论 -
iOS8 Core Image In Swift:更复杂的滤镜
Core Image是一个很强大的框架。它可以让你简单地应用各种滤镜来处理图像,比如修改鲜艳程度, 色泽, 或者曝光。 它利用GPU(或者CPU)来非常快速、甚至实时地处理图像数据和视频的帧。并且隐藏了底层图形处理的所有细节,通过提供的API就能简单的使用了,无须关心OpenGL或者OpenGL ES是如何充分利用GPU的能力的,也不需要你知道GCD在其中发挥了怎样的作用,Core Image处理了全部的细节。本文将会提到更复杂的滤镜以及子类化CIFilter的使用。原创 2014-09-12 00:52:19 · 27343 阅读 · 13 评论 -
iOS8 Core Image In Swift:自动改善图像以及内置滤镜的使用
Core Image是一个很强大的框架。它可以让你简单地应用各种滤镜来处理图像,比如修改鲜艳程度, 色泽, 或者曝光。 它利用GPU(或者CPU)来非常快速、甚至实时地处理图像数据和视频的帧。并且隐藏了底层图形处理的所有细节,通过提供的API就能简单的使用了,无须关心OpenGL或者OpenGL ES是如何充分利用GPU的能力的,也不需要你知道GCD在其中发挥了怎样的作用,Core Image处理了全部的细节。本文将会提到自动改善图像以及内置滤镜的使用。原创 2014-09-06 23:33:29 · 24865 阅读 · 3 评论 -
iOS GCD使用指南
Grand Central Dispatch(GCD)是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统级中实现。开发者只需要定义想执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务。由于线程管理是作为系统的一部分来实现的,因此可统一管理,也可执行任务,这样就比以前的线程更有效率。原创 2014-08-29 15:09:33 · 43211 阅读 · 8 评论 -
Swift 柯里化(Currying)
在计算机科学中,柯里化(英语:Currying),又譯為卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。这个技术由 Christopher Strachey 以逻辑学家哈斯凱爾·加里命名的,尽管它是 Moses Schönfinkel 和 戈特洛布·弗雷格 发明的。原创 2014-08-26 20:06:29 · 7680 阅读 · 0 评论 -
Swift 值类型和引用类型
Swift中的类型分为两类:一,值类型(value types),每个值类型的实例都拥有各自唯一的数据,通常它们是结构体,枚举或元组;二,引用类型(reference types),引用类型的实例共享它们的数据,通常是一个类。在这篇文章中我们将会探索值类型和引用类型的价值,以及如何在它们二者间抉择。翻译 2014-08-20 16:58:08 · 11707 阅读 · 0 评论 -
Swift Switch介绍
Switch作为选择结构中必不可少的语句也被加入到了Swift中,只要有过编程经验的人对Switch语句都不会感到陌生,但苹果对Switch进行了大大的增强,使其拥有其他语言中没有的特性。原创 2014-08-18 23:36:31 · 37892 阅读 · 0 评论 -
Swift 可选值(Optional Values)介绍
Optional也是Objective-C没有的数据类型,是苹果引入到Swift语言中的全新类型,它的特点就和它的名字一样:可以有值,也可以没有值,当它没有值时,就是nil。此外,Swift的nil也和Objective-C有些不一样,在Objective-C中,只有对象才能为nil,而在Swift里,当基础类型(整形、浮点、布尔等)没有值时,也是nil,而不是一个初始值,没有初始值的值,是不能使用的,这就产生了Optional类型。原创 2014-08-17 19:02:15 · 48872 阅读 · 27 评论 -
Swift 元组(Tuples)介绍
元组是Objective-C中没有的数据类型,与数组类似,都是表示一组数据的集合,但与数组不同,它的特点是:元组的长度任意元组中的数据可以是不同的数据类型原创 2014-08-14 23:38:26 · 19361 阅读 · 0 评论 -
Xcode及模拟器SDK下载
现在不会有人想在 Xcode 里安装旧版的模拟器了,本篇不再维护---------------------------------------------------------------------------如果你嫌在 App Store 下载 Xcode 太慢,你也可以选择从网络上下载:Xcode下载(Beta版打的包是不能提交到App Store上的)绝对官方源!!!绝对...原创 2014-08-11 13:39:57 · 156510 阅读 · 152 评论 -
iOS 自定义页面的切换动画与交互动画 By Swift
在iOS7之前,开发者为了寻求自定义Navigation Controller的Push/Pop动画,只能受限于子类化一个UINavigationController,或是用自定义的动画去覆盖它。但是随着iOS7的到来,Apple针对开发者推出了新的工具,以更灵活地方式管理UIViewController切换。原创 2014-08-11 17:30:48 · 44846 阅读 · 16 评论 -
iOS 为移动动画中的View添加touch事件
对Core Animation来说,不管是显式动画还是隐式动画,对其设置frame都是立即设置的,比如说给一个UIView做移动动画,虽然看起来frame在持续改变,但其时它的frame已经是最终值了,这种情况下,哪怕这个UIView是UIButton的实例,其触发touch事件的范围还是最终frame的地方。原创 2014-08-03 14:22:27 · 18398 阅读 · 0 评论 -
如何避免在Block里用self造成循环引用
一般来说我们总会在设置Block之后,在合适的时间回调Block,而不希望回调Block的时候Block已经被释放了,所以我们需要对Block进行copy,copy到堆中,以便后用。当一个Block被Copy的时候,如果你在Block里进行了一些调用,那么将会有一个强引用指向这些调用方法的调用者,有两个规则原创 2014-07-29 18:59:28 · 59617 阅读 · 0 评论 -
iOS 实现脉冲雷达以及动态增减元素 By Swift
Swift经过Xcode6 Beta4一版更新后,基本上已经可以作为生产工具了,虽然有一些地方和ObjC比起来要“落后”一些,但也无伤大雅。这里就用Xcode6 Beta4+iOS SDK 8.0开发,如果用ObjC的话,只需把某些语法和调用方式替换一下就可以了。原创 2014-07-28 01:31:12 · 16642 阅读 · 7 评论 -
在UIWebView中加载本地图片
NSString *imagePath = [[NSBundle mainBundle] resourcePath];imagePath = [imagePath stringByReplacingOccurrencesOfString:@"/" withString:@"//"];imagePath = [imagePath stringByReplacingOccurrencesOfStr原创 2012-02-15 18:16:58 · 14046 阅读 · 2 评论 -
在iPhone上实现标签云
效果图:下载地址原创 2011-11-18 16:24:16 · 7971 阅读 · 2 评论 -
用GDB命令PO(print-object)打印UIView的视图层级
UIView有一个私有方法:recursiveDescription这个方法可以显示出当前视图的详细层级,可以在代码中直接调用,也可以在GDB中调用,在GDB中调用时需要借助另一个GDB命令:print-object:recursiveDescription:由于是私有方法,键入时不会有任何提示,注意不要输错。tips:如果想知道prin原创 2012-02-04 13:30:11 · 10960 阅读 · 0 评论