iOS开发总结
布衣来者
从事iOS客户端的开发工作,喜爱编程,熟悉敏捷开发的流程
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
iOS中如何禁用系统自带的Emoji表情键盘
TextModel原创 2017-05-31 14:13:35 · 8204 阅读 · 0 评论 -
Swift中如何通过KVC将自定义的UITabbar设置为UITabbarController的tabbar
开发中经常会自定义tabbar,将自己定义的tabbar设置为系统的tabbar有很多种方法,这里说一种最简单的方法,我们知道OC是运行时的,我们可以通过KVC来操作,其实说白了就一句话的事,假如我们自己自己定义了一个新的tabbar叫myTabbar,这个时候设置的代码就是: setValue(myTabbar, forKeyPath: "tabBar"),这样就完成了,是不是很简单,就原创 2016-08-31 17:50:31 · 773 阅读 · 0 评论 -
Swift中的单例的一种简单写法
Swift中单例的写法有很多种,下边表述一种比较简单的方法,我们知道,单例就是一块内存到处可以用,如下,类名字是:NetWorkRequest,单例的类方法是:shareNetWorkRequest,我们可以通过懒加载的方式,定义一个本身的类,当然这个类要用static修饰,然后在类方法中返回这个对象即可,这样就很简单的写成了一个单例,代码如下: static let tools:NetWor原创 2016-08-31 17:39:20 · 1582 阅读 · 0 评论 -
Swift中如何实现自定义Debug模式下打印Log
打印log是开发阶段,调试过程中是必不可少的一步,objective-c时代我们可以使用宏定义来设置工程debug模式下打印log,release模式下不打印log,但是过度到swift之后,我们发现swift的版本特性,不具有宏这种东西,所以也就不那么容易实现类似OC中的debug模式才能打印log的功能,但是还是可以操作的,方法如下:原创 2016-08-31 13:53:11 · 3806 阅读 · 0 评论 -
iOS开发中如何用Swif重写cell的frame方法
设置cell的内边距的时候会用到重写setframe的方法,OC里边很简单,但是在Swift中稍微有点麻烦,我在写的时候内存陷入了死循环,现在总结下后来正确的写法,希望能帮到你,说白了其实很简单:代码如下 override var frame:CGRect{ didSet { var newFrame = frame原创 2016-07-28 13:57:46 · 1804 阅读 · 2 评论 -
iOS中图片压缩的常见方法
开发中经常会碰到从手机相册中选择图片的需求,选择图片这个过程是一个消耗性能的过程,取决于手机图片的大小,如果手机像素非常高,图片的尺寸非常大,这个时候就会变得很消耗性能,比如一张图片5兆,这个时候选择后加载的时候就会有些卡顿,内存开始大幅升高,仔细想想也没有这种必要去加载这么大的图片,所以总结了两种处理方法,提供参考1:对图片进行压缩,iOS的API中提供了函数进行压缩,代码如下:如上两种方法原创 2016-07-06 13:08:01 · 12359 阅读 · 3 评论 -
iOS中CocoaPods使用时候报错 ”is not used in any concrete target”的原因及解决办法
使用cocoapods时候,一些比较久的工程,有时候会遇到is not used in any concrete target.的问题,例如:`SDWebImage (~> 3.7.5)` is not used in any concrete target.,出现这种错误的原因是cocoapod版本问题,自己当前的版本可以通过 pod --version 查看版本号;如果你的podfile升级到原创 2016-06-20 14:52:46 · 1436 阅读 · 0 评论 -
iOS中使用UITextView时候的一些小技巧
1:inputView属性,设置过该属性之后键盘将不再弹出,此时的键盘就是自己设置的inputView,若是自定义键盘可以使用该属性进行一定的操作2:alwaysBounceVertical属性,默认是false,设置为true之后textview将变得能够一直可以滚动,还一个属性是水平的方向,这个是竖直 的方向,3:keyboardDismissMode属性,是个枚举值,里边包含在什么情原创 2016-07-05 11:46:43 · 1862 阅读 · 0 评论 -
iOS中使用GCD中的Group管理子线程
之前的项目中有用到SDWebimage缓存图片,当图片只有一张的时候,无所谓,在回调的方法中直接调用即可,但是如果是多张图片的话,这个时候不知道哪个线程先完成,因为SDWebimage下载一张图片是开一个子线程,多张的话就多张子线程,如果我们需要在所有下载完成之后再进行回调,这个时候需要用到GCD中的Group知识点,会在所有的子线程完成之后给一个回调,这个时候就实现了之前的需求,步骤如下:1原创 2016-06-16 17:11:36 · 1740 阅读 · 0 评论 -
iOS中如何在Xib中为UIView及其子类设置圆角
开发中经常会给UIView及其之类设置圆角,这个时候我们要改变view的layer层的两个属性,分别是:layer.cornerRadius,设置属性和layer.masksToBounds 超出边界是否剪除,通过这两个属性我们可以设置圆角,而且当view是正方形的时候,我们设置的角度是一半的时候,会发现VIew将变成原型,很方便 平时开发如果是固定的页面布局,这个时候我们可以用Xib或原创 2016-07-22 17:47:10 · 1236 阅读 · 0 评论 -
iOS中创建文件目录时候存储路径的一些注意点
创建文件时候会先创建路径,这个时候会有一些重点需要注意,现总结如下:1:Documents 主要用来保存由应用程序本身所产生的文件或者数据内容,例如,项目涂鸦时候的绘图,截屏之类的内容,项目的进度等等,需要注意的是改目录的文件会被自动保存在iCloud,该目录不能保存从网络上下载的内容,否则可能导致不能上线;2:Caches主要用来保存临时文件,既后续需要使用的内容,例如:缓存原创 2016-06-14 11:10:39 · 4301 阅读 · 0 评论 -
iOS UIWebView中Objective-C与Javascript的深层交互(三)
上篇文章中讲述了如何通过代码直接用JavaScript调用Objective-C方法,本文通过另一种思路实现,即通过稍微复杂的一种方法,即通过一个对象来调用方法,该方法通过实现一个协议来操作,即JSExport协议 JSEXport,凡是添加了JSEXPort协议的协议,所规定的方法,变量等,就会对JS开放,我们都可以通过JS的类调用到。比如:JS方法为account.acco原创 2016-06-07 15:41:49 · 628 阅读 · 0 评论 -
iOS UIWebView中Objective-C与Javascript的深层交互(二)
上篇文章中讲到了如获取JSContext以及如何通过JSContext实现OC调用JS的代码功能,该文总结下如何通过JavaScript调用OC的代码,也不麻烦:本文讲述直接调用的方法 1:和之前一样:首先创建JSContext对象,JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.ja原创 2016-06-07 15:03:46 · 524 阅读 · 0 评论 -
iOS UIWebView中Objective-C与Javascript的深层交互(一)
最近项目中有用到OC与JS的交互,刚开始时候觉得只用一个函数就能搞定交互,即 stringByEvaluatingJavaScriptFromString 后边为JS代码转化的字符串,后来随着项目的内容的增多,逐渐发现功能有些捉襟见肘,网上搜索了一些方法,解决了问题,先总结如下文,借鉴下经验,方便记忆的同时,也希望能稍微帮助到一点别人 正常的WebView的代理方法就不再多做赘述,i原创 2016-06-07 14:37:54 · 681 阅读 · 1 评论 -
swift中根据宽度计算文字高度的方法的封装
开发中经常会用到根据字符串的宽度或者高度来算高度以及宽度的情况,OC中比较好操作,但是之前的一些方法被舍弃之后再过度到swift会有些茫然,好在找了下api,也百度一下别人的方法,自己封装了根据高算宽以及根据宽算高的方法,留着以后自己使用,也希望能帮到别人吗,方法如下:func getTextHeigh(textStr:String,font:UIFont,width:CGFloat) -原创 2016-08-24 11:44:38 · 7266 阅读 · 0 评论 -
iOS10的适配(一)
果然是苹果每次更新,都要引来好多改动,大修大改之际,免不得费颇多功夫,查阅一些资料踩完坑之后,现总结下适配iOS10时候的一些知识点1:最明显的就是隐私数据访问问题,这个不适配的话,点击就会崩溃,甚至连ipa包都发不出去,主要的方法就是在info.plist文件中加入你项目中使用到的隐私选项,对比与ios8或者iOS9时代,这次的选项变得很多,主要有以下: NSPhotoLibrary原创 2016-09-19 14:23:26 · 1660 阅读 · 0 评论 -
iOS10的适配(二)
1 UIRefreshControl之前的时候继承与UUISCrollView的控件添加下拉刷新的时候是没有系统属性的,主要是靠第三方的MJ或者EGO等框架,现在倒好,苹果自己搞了个刷新的属性出来,可以直接在瀑布流或者UITableView中使用,这样省去了好多事,不过要是需要自定义的话,还是要好好自定义夏refreshcontrol,简单的如下: UIRefreshCont原创 2016-09-19 14:35:03 · 695 阅读 · 0 评论 -
MBProgressHUD needs to be accessed on the main thread.报错的解决办法
MBProgressHUD和SVP是最常见的状态显示的第三方库了,最近遇到个MB的问题,如标题所示,崩溃崩到三方库的内部了,字面意思是必须要放到主线程了,请看我最初写的代码:-(void)showMessage:(NSString *)message{ MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view anima原创 2017-03-24 12:22:18 · 4525 阅读 · 0 评论 -
iOS中修改APP的名称
其实很简单,不过经常是字段名称容易忘记,具体的做法是在InfoPlist.s文件里加上CFBundleDisplayName选项,类型是String,然后对应写上你想要的中文名称即可,很简单,不过这个字段的名称容易忘记,记录下,下次直接复制就好了原创 2017-02-28 16:41:03 · 1984 阅读 · 0 评论 -
iOS中使用SDWebImage加载图片失败之后如何重新加载
毫无疑问,SDWebImage绝对是我们平时做项目使用频率最广的第三方框架之一,良好的封装性和性能,真的是非常优秀,最近项目中使用了这个库函数加载网络图片,但是发现了一个问题,就是有时候网速不太好,比如当前的WiFi的信号不太强,这个时候图片就会加载不出来,这个本来无可厚非,网速嘛,总是有好有坏的啊,不过当切换到比较流畅的网速的时候,比如从wifi过渡到4G,这个时候惊讶的发现,之前加载失败的图片原创 2016-12-27 18:00:04 · 5354 阅读 · 0 评论 -
iOS中用swift转换日期的几个通用函数
由于上个项目用的日期类型的转换还是蛮多的,所以封装几个通用的函数,其实说白了也是很简单的东西,不过这次封装好方便以后的使用,以希望可以帮到别人1:根据时间戳获取当前日期的函数: func getCurrentTime(timeNum:double) -> String { let formatter = DateFormatter() formatter原创 2016-12-23 14:36:47 · 2283 阅读 · 0 评论 -
Swift3.0中GCD定时器的使用
swift3.0语法变化之后,好多东西用法都发生了变化,最近要用到定时器,网上搜集了好多写法,最后才搞好,现分享一下,方便以后使用,也希望能帮助别人首先,创建定时器,和之前的有所不同,代码如下: var timer = DispatchSource.makeTimerSource(flags: [], queue:DispatchQueue.main),即在主线程中创建一个定时器,该原创 2016-12-23 11:05:01 · 6751 阅读 · 2 评论 -
swift3.0使用友盟分享遇到无法调出分享界面的解决办法
最近使用了友盟的分享,项目是swift语言的版本,但是发现友盟的sdk版本是oc的,首先有种不详的预感啊,好吧,但是项目总是要继续完成的,按照官方文档的指点一步一步的集成,发现原来也不麻烦,无外乎添加库文件,添加编译参数之类的,一切编译都已通过,当兴冲冲的点下相应的分享按钮,预想中的分享界面并没有出现,这落差,哎,只有一步一步的重新检查,然而,经过检查并没有发现问题出现在哪里,没办法,从新把东西删原创 2016-12-22 14:24:38 · 1600 阅读 · 0 评论 -
iOS中使用swift语言做淘宝的第三方登录
现在第三方登录是在大部分APP都有的功能,我们最近项目中使用了淘宝的第三方登录,这个我们平时使用的较少,而且使用的是swift3.0,调用oc语法,使用过程中还是遇到了些问题,所以现在做下终结,方便下次使用首先:淘宝的第三方的登录需要到阿里百川的官网上申请,和其他的一样,嵌入sdk之后即可调用语法,这种很常见,没什么与众不同的点,按照官方文档来即可,我所遇到的问题是,需要用swift调用obj原创 2016-12-22 14:01:07 · 1600 阅读 · 0 评论 -
iOS中的runtime入门(一)
runitme是iOS开发中的一个重要知识点,runtime简称运行时,objective-c中最主要的是消息机制,这里我们可以对比下C和OC的操作方式:C语言函数的调用在编译的时候会决定调用哪个函数,而oc中是动态调用的过程,在编译的时候并不真正决定调用哪个函数,只有在真正运行的时候才会根据函数的名称找到其相对应的函数进行调用。 我们知道,方法调用的本质实际是让对象发送消息,我们平时使用的原创 2016-09-30 14:56:34 · 505 阅读 · 0 评论 -
iOS中弹簧动画函数的解释
iOS7之后,苹果新增加了弹簧动画的API,利用这个可以做出来很炫酷的效果,其实也就是一个函数,只不过苹果封装好了,这个函数挺长的,参数也多,在这里根据自己的理解解释下,首先,函数是: + (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDa原创 2016-11-17 17:45:28 · 1575 阅读 · 0 评论 -
支付宝sdk集成过程中报 openssl/asn1.h file not found错误的解决办法
最近在做集成支付宝sdk,新版支付宝的sdk集成后,有可能会报两种错误,第一种官方文档上有说,一般是base64file not found之类的,这个原因是没有导入foundation框架导致的,导入即可。另一种是如标题所说的 openssl/asn1.h file not found错误,这个也算是挺常见的一种错误,原因是搜索路径没有设置好,解决办法是选择target - build se原创 2016-10-12 15:38:23 · 3278 阅读 · 0 评论 -
Xcode8中的钥匙串保存数据取出时候为空的问题
苹果还真是喜欢折腾啊,好好的钥匙串保存非要给你整出来点事,Xcode7以及之前的版本直接使用Keychain存储数据即可,具体方法可以参照下网上的,不是本文的重点,但是从Xcode开始,再用之前的方法会发现,读取不到存进去的数据了,或者说,存储不进去了,原因是苹果加强了隐私保护,这个东西需要打开开关,个人觉得苹果这样改这个keychain意义不大,解决办法如下:如下图只原创 2016-09-20 13:11:45 · 2027 阅读 · 1 评论 -
Attempt to set a non-property-list object 报错问题
NSUserDefaults只能保存诸如NSArray、NSDictionary、NSData、NSNumber等基本数据类型,如果我们强制保存自定义的类,就会出现这个错误:Attempt to set a non-property-list object as an NSUserDefaults value for ,解释起来:【试图将一个非属性列表对象设置为 NSUserDefaults】原创 2016-06-07 13:06:12 · 6188 阅读 · 0 评论 -
iOS中通过字符串创建类(Swift)
开发中可能会经常遇到动态创建类的情况,有时候是根据服务器返回的字段进行处理,在OC中很简单,直接通过NSClassFromString方法即可,但是在Swift中,要加上命名空间才能够创建,具体如下: 1:命名空间的获取,这个要动态获取或者直接写死,直接写死的话,如果改了项目名字的话就不能用了,所以最好尽量动态获取,获取方法为: let nameSpace = NSBundle原创 2016-06-02 10:51:09 · 1531 阅读 · 0 评论 -
关于导航栏设置的一些操作
1:设置导航栏上的字体颜色:2:设置返回按钮:3:设置图片的方法:原创 2015-07-22 10:16:45 · 712 阅读 · 0 评论 -
使用sharesdk 进行第三方分享的流程
第三方分享代码实现相对来说比较简单,关键是申请号所需要的各种值,如appkey,appsecret之类的数据,若是已申请好,操作起来相对来说,也不麻烦 具体的过程如下: 1:官方下载sharesdk的sdk.这个时候编译会报错,根据官方文档的指导导入依赖库即可,这是就不会在报错; 2:注册你的应用在shareSDK官方申请到的key,让他们知晓你是注册过的原创 2015-07-18 16:06:59 · 950 阅读 · 0 评论 -
OAuth的授权步骤
1:获取未授权的Request Token (即跳转到登陆界面(网页)) 请求参数:client_id:申请的appkey redirect_url:授权成功后的回调地址2: 获取用户授权的Request Token(用户输入账号密码进行登陆授权)3:用授权过的Request Token换取Access Token原创 2015-07-17 11:16:57 · 512 阅读 · 0 评论 -
iOS中通知传值的使用
传值有很多种,个人觉得通知模式使用起来相对简单,步奏如下:1:注册一个通知中心:如://添加字典 NSDictionary*dict=@{。。。。。}; //创建通知 NSNotification*notification=[NSNotificationnotificationWithName:@"tongzhi"object:niluserIn原创 2015-07-13 15:26:44 · 484 阅读 · 0 评论 -
iOS中支付宝的接入使用注意点
前期的准备如导入之类的饿就不再多叙述,这里主要注意两点:1:支付宝给的Demo中会有详细的写法,Order类类似于数据模型,需要自己创建,可以参照官方的写,把所需要的信息传递给支付宝,scheme需要自己设置,方便支付完成之后进行跳转回你的app,你服务端的url要写正确,方便支付宝进行回调;2:回调函数会在两个地方有,一个是你的类里边,一个是在appdelegate里边,前者是通过函数:原创 2015-07-09 19:05:15 · 1001 阅读 · 0 评论 -
删除Xcode自带的Storyboard和ViewController的过程
从Xcode6开始,不再有新的空工程的选项,很多时候想建立一个新的空工程,这个时候你可以不理会系统创建的viewcontroller,然后把自己的视图控制器作为根视图,这样没有什么关系,但是若是嫌其不整洁,可以将其删除掉,然后把自己的视图控制器设为根视图,具体的步奏如下: 1:直接删除Storyboard 和ViewController,不是删索引,是直接移除: 2原创 2015-07-02 09:33:48 · 3642 阅读 · 0 评论 -
LayoutSubViews的使用
凡是继承自UIView的类都能使用该方法,下列是会调用的情况:1、init初始化不会触发layoutSubviews2、addSubview会触发layoutSubviews 3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化 4、滚动一个UIScrollView会触发layoutSubviews 5、旋转Screen原创 2015-07-02 19:00:09 · 580 阅读 · 0 评论 -
如何在项目发布的时候去除所有的NSLog
由于开发过程调试的时候总会用到NSLog.但是我们在发布正式版本的时候并不希望这些,一方面损耗性能,另一方面也不太安全,这里介绍宏定义的方法,进行处理这种状况在工程的pch文件里边进行操作#ifdef DEBUG #define NSLog(...) NSLog(__VA_ARGS__) #define debugMethod() NSLog(@"%s", __fu原创 2015-07-02 11:32:01 · 895 阅读 · 0 评论 -
UIApplacation的一些用途
1:每个应用程序有且仅有一个UIApplacation的对象,即,单例;2:可以设置图标上的提示数目;3:打开URL(用系统的浏览器),带电话,发短信,发邮件等;4:设置摇动手势是否支持;5:阻止进入休眠状态原创 2015-07-03 09:03:17 · 780 阅读 · 0 评论 -
在Xcode中添加pch文件的操作
自从Xcode6之后,苹果取消了之前自动就创建的pch文件,但是我们在工程中还是需要用到的,比如一些全局的宏定义或者第三方库头文件的导入等等,这个时候需要自己创建,具体步骤如下: 1:创建新的pch文件,最好和你的工程名一样,这样才方便区分; 2:修改路径,具体做法:build setting中搜索prefix,然后将precompile prefix header改为YE原创 2015-07-01 10:42:30 · 620 阅读 · 0 评论
分享