Object-C
文章平均质量分 74
xttxqjfg
iOS开发交流群:484884085。欢迎大家加入!
站外博客:http://xttxqjfg.cn
展开
-
基于融云实现应用公众号
好久没有研究融云相关的内容了,最近看到融云已经集成了公众号,有应用内的,也有接入第三方应用市场的。不得不说,融云在即时通讯这块内容做的已经很丰富了。这里没有打广告的意思,即时通讯SDK哪家强,仁者见仁智者见智,我不做对比。只是个人使用融云的产品较多,所以这里重点介绍基于融云的SDK实现应用内公众号服务。公众号消息的发送实际上应该是由应用服务器调用融云的接口来实现,这里采用的方式是客户端模拟服务端请求原创 2018-01-04 15:13:39 · 1332 阅读 · 0 评论 -
使用kxmenu时在UIBarButtonItem上frame无效
UIBarButtonItem *addItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addBtnClicked:event:)]; self.navigationItem.rightBarButto原创 2017-05-10 14:49:28 · 489 阅读 · 0 评论 -
音频三--音频会话
1.设置后台运行模式:在plist文件中添加Required background modes,并且设置item 0=App plays audio or streams audio/video using AirPlay(其实可以直接通过Xcode在Project Targets-Capabilities-Background Modes中设置)2.设置AVAudioSession的类型为A原创 2017-05-04 14:44:05 · 385 阅读 · 0 评论 -
音频二--音乐
AVAudioPlayer的使用比较简单:1、初始化AVAudioPlayer对象,此时通常指定本地文件路径。2、设置播放器属性,例如重复次数、音量大小等。3、调用play方法播放。下面就使用AVAudioPlayer实现一个简单播放器,在这个播放器中实现了播放、暂停、显示播放进度功能。#import "ViewController.h"#import #define kM原创 2017-05-04 14:32:57 · 276 阅读 · 0 评论 -
音频一--音效
在iOS中音频播放从形式上可以分为音效播放和音乐播放。前者主要指的是一些短音频播放,对于这类音频不需要进行进度、循环等控制。后者指的是一些较长的音频,通常是主音频,对于这些音频的播放通常需要进行精确的控制。在iOS中播放两类音频分别使用AudioToolbox.framework和AVFoundation.framework来完成音效和音乐播放。AudioToolbox.framewo原创 2017-05-04 14:13:01 · 438 阅读 · 0 评论 -
导航栏隐藏的平滑切换
最近项目要用到透明导航栏,如果只是单纯的将导航栏设置为隐藏,则在切换页面的时候过度就很生硬,体验很不好,网上搜索了好几个实例看了下,基本都是用runtime的黑魔法实现的,但是效果都没有达到我需要的效果,所以就综合几个示例,完成了下面的demo,切换效果还是很好,很平滑,达到了预期的效果。本示例也是通过runtime黑魔法来实现的,这里做个记录,有需要的可以拿过去用,本篇会贴出全部的关键代码段原创 2017-04-06 10:57:01 · 1227 阅读 · 0 评论 -
xib中User Defined Runtime Attributes使用
1、一般的控件直接使用layer.cornerRadius即可2、UIImageView还需要设置layer.maskToBounds原创 2017-04-14 13:07:17 · 1321 阅读 · 0 评论 -
适配iOS10的权限设置
* 麦克风权限:Privacy - Microphone Usage Description 是否允许此App使用你的麦克风?* 相机权限: Privacy - Camera Usage Description 是否允许此App使用你的相机?* 相册权限: Privacy - Photo Library Usage Description 是否允许此App访问你的媒体资料库?* 通讯录原创 2017-04-14 13:09:23 · 491 阅读 · 0 评论 -
tableview实现单个cell的展开和收起
此篇主要介绍采用替换cell的方式来实现cell的收起和展开效果,下面是效果图,分为只能展开一个cell和都能展开两种代码实现#import "replaceVC.h"#import "TitleCell.h"#import "DetailCell.h"@interface replaceVC ()@property (nonatomic,strong) UIT原创 2017-04-28 12:49:38 · 3933 阅读 · 1 评论 -
WKWebView使用功能点
1、更改UA,wk提供了新的属性customUserAgent直接修改,不用下面的如此麻烦// 更改全局UA,此处修改之后,app内都将使用这个新的UAUser-AgentUIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];NSString *oldAgent = [webView stringByEvalua原创 2017-04-05 11:22:11 · 407 阅读 · 0 评论 -
Cordova for iOS-环境安装(一)
安装nodejs1、浏览器访问https://nodejs.org ,下载nodejs2、设置国内镜像地址,不然cordova会安装失败。使用一下命令,管理员权限下输入npm config set registry http://registry.cnpmjs.org npm info underscore (如果上面配置正确这个命令会有字符串response)创建原创 2016-05-24 15:14:18 · 2101 阅读 · 0 评论 -
iOS应用上架App Store流程解析
一直以来,将自己开发的应用程序上架到苹果爸爸的App Store是iOS开发者又爱又恨的事情。爱,是因为上架之后的成就感,恨,是因为上架过程中的不断爬坑。一般来说,只要开发者的App不违反苹果的上架协议,一次通过的概率还是很高的,而且苹果的审核团队现在狠狠的提高了审核效率,最快在12小时内就会有审核结果。好了,废话不多说了,开始正文Developer Center配置要将自己开发的应用上架到App原创 2017-06-20 15:44:13 · 613 阅读 · 0 评论 -
Cocoapods安装及使用
最近项目中在集成视频播放,采用了封装很优秀的开源播放器MobileVLCKit,这里使用的是V2.2.2版本。期间遇到了pods安装相当慢的问题,这里就记录一下cocoapods的安装方法和针对下载速度慢的pods项目如何处理cocoapods安装1、指定gem的源地址//更换墙内地址gem sources --add https://gems.ruby-china.org/ --remove h原创 2018-01-11 13:48:36 · 625 阅读 · 0 评论 -
__attribute__简析
__attribute__表示属性,是Clang提供的一种源码注释,方便开发者向编译器表达诉求,一般以__attribute__(*)的方式出现在代码中。为了方便使用,一些常用属性被定义成了宏,经常出现在系统头文件中。比如NS_CLASS_AVAILABLE_IOS(9_0) 就是 __attribute__(availability(9.0)) 这个属性的简单写法。下面介绍一些可能会频繁使用到的属原创 2018-01-11 13:47:34 · 861 阅读 · 0 评论 -
Xcode报Invalid bitcode signature错误的解决方案
最近由于需要做iPhone X的适配工作,不得以升级了Xcode9和macOS High Sierra。升级后使用Xcode9编译原来的项目代码就出现了问题,会报一个Invalid bitcode signature的错误,经过多方查找问题,发现是pods的配置导致的,下面是解决方案1、修改工程中pods的设置如下,可以参考原来Xcode8的工程配置2、替换脚本diff "${PODS_ROOT}/原创 2017-12-01 09:46:38 · 4602 阅读 · 0 评论 -
常用URL Scheme
系统相关 应用名称 URL Scheme 短信 sms:// app store itms-apps:// 电话 tel:// 无线局域网 App-Prefs:root=WIFI 蓝牙 App-Prefs:root=Bluetooth 蜂窝移动网络 App-Prefs:root=MOBILE_DATA_SETTINGS_ID 个人热点 A原创 2017-07-24 13:52:22 · 28475 阅读 · 3 评论 -
APNS机制的简单分析
提到消息推送,那就不得不提及苹果的APNS(Apple Push Notification Service)。我们首先来看一组数据(数据来自互联网)1. 苹果在WWDC 2012上宣布每天发送70亿条消息推送2. 有分析称在苹果的2019财年,iPhone活跃用户数量将突破10亿那么你有没有想过,这几年移动互联网的快速发展,APNS推送数据保守估能达到将近千亿的量级,这么大的用户活跃量和巨大的消原创 2017-07-06 17:08:58 · 847 阅读 · 0 评论 -
MVC、MVVM之我见
MVCMVC,全称是Model(数据) View(用户界面) Controller(业务逻辑)。从这个概念被提出来到现在,MVC已经成为了主流的客户端编程架构上面是一个典型的MVC图。Controller捕获到事件后通知Model做数据处理,Model处理完了之后Controller将数据反馈给View来完成展示或者更新。逻辑很清晰哈,但是这样会有一个明显的问题,那就是Controller时时刻刻在原创 2017-07-06 13:46:03 · 554 阅读 · 0 评论 -
仿QQ联系人列表
本示例代码是仿TIM好友列表的效果,采用UITableView来实现,分组名称为tableview的header,根据展开的状态来判断需要返回cell的数目。效果图如下。代码包含12个文件,其中资源文件包含3个图片、1个数据源文件,目录结构如下。工程文件已经上传到github,有需要的可以直接下载运行代码地址原创 2017-06-13 09:18:30 · 1141 阅读 · 0 评论 -
上架App Store问题及解决方法
1、arm64的支持工程设置增加arm64的支持检查工程中所引用的第三方的静态包是不是支持arm64。打开终端,输入file空格,然后在Finder中将要检查的静态包文件拖到空格后面,回车,即可列出该静态包所支持的架构2、访问权限的问题Missing Info.plist key - This app attempts to access privacy-sensitive data wi原创 2017-06-20 15:46:57 · 488 阅读 · 0 评论 -
由浅到深理解iOS的签名机制
一直以来,针对iOS开发者,特别是刚入行的开发者,apple的签名机制是一个理解的难点,多种证书、描述文件、证书签名请求(CSR)等等,都是一些专业名词,加上apple签名机制的复杂性,难以理出头绪。本文将由浅入深解析apple的签名机制,希望能帮助大家解惑在这之前,首先先理解两个概念:非对称加密和数字证书非对称加密上面提到的签名就是数字签名,它是基于非对称加密算法实现的。对称加密算法是加密和解密内原创 2017-06-20 15:44:56 · 1658 阅读 · 0 评论 -
xcode重定向log到本地问题
使用前需要在plist中设置日志共享在info.plist中打开Application supports iTunes file sharing- (void)redirectNSlogToDocumentFolder { NSLog(@"Log重定向到本地,如果您需要控制台Log,注释掉重定向逻辑即可。"); NSArray *paths = NSSearch原创 2017-04-13 10:42:27 · 1122 阅读 · 0 评论 -
微信支付-简易实例代码
最近由于项目需要集成微信支付,这里记录一下集成过程中的步骤。要集成微信支付首先需要到微信开发者平台注册企业开发者。注册成功之后,收集项目用的唯一id,iOS为Boundle ID,Android为包名。然后在开发中心创建应用,得到项目的AppId、MchId-商户账户,获取支付能里后,从邮件中得到、AppSercret-商户密钥,32位字符串,在商户平台中设置。得到这三个值后就可以开始开发了。原创 2017-03-17 09:52:25 · 4841 阅读 · 0 评论 -
轮播器(一)--UIScrollView实现图片轮播
此篇文章主要介绍如何采用UIScrollView来实现轮播图,加入定时器来实现自动轮播#import @protocol CarouselDelegate //图片的点击事件-(void)clickedAtIndex:(NSInteger)index;@end@interface CarouselView1 : UIView//代理@property (nonatomi原创 2017-04-10 10:32:36 · 403 阅读 · 0 评论 -
iOS runtime(二)
本文通过一个示例来介绍runtime的拦截替换方法的使用,该魔法主要用于给系统方法添加新的功能,示例为系统按钮的点击事件增加了一个计算点击次数的方法。#import "UIButton+Count.h"#import #import "ZTools.h"@implementation UIButton (Count)+ (void)load{ static dispatc原创 2017-03-20 16:54:28 · 298 阅读 · 0 评论 -
iOS runtime(一)
runtime,直译的意思就是运行时,这是iOS开发中很重要的一个概念,其本质就是消息发送机制,是iOS开发中的一个黑魔法。众所周知,OC在编译阶段,不管是否有实现这个方法,都可通过编译,这就给开发者留下了很大的空间,可以利用黑魔法,在函数执行的时候动态做一些事情。下面就是我学习runtime的一点记录。本文介绍runtime的常用方法,包括动态获取一个对象的成员变量、属性、方法以及遵守的协议原创 2017-03-20 16:11:16 · 318 阅读 · 0 评论 -
解决h5调用相机时页面dismiss到根控制器的问题
在调用h5的vc中重写下面代码即可- (void) dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion { if ( self.presentedViewController) { [super dismissViewControllerAnimated:flag原创 2017-01-23 10:19:23 · 886 阅读 · 0 评论 -
利用xcodeproj修改xcode工程文件
文章主要介绍如何用命令行给xcode工程添加文件引用,当然,如果大伙觉得直接使用xcode添加文件更好,那接下来的内容就可以不用看了。众所周知,xcode的工程文件是一堆让人无法理解的字符串,其实它也是有其规则的,我们可以使用xcodeproj这个插件来实现用代码修改xcode的工程文件。首先:电脑安装ruby,且要求是2.2.2以上的版本,操作系统自带的是2.0的版本安装步骤:1原创 2017-01-16 17:55:28 · 5593 阅读 · 7 评论 -
macOS sierra安装cocoapods
以下步骤的前提是在我格式化磁盘重新安装全新的操作系统之后操作的,操作前请注意。第一步:指定gem的源地址打开终端输入下面的命令gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/删除原有的地址,新增源地址。之前为https://ruby.taobao.org/,不过好像原创 2016-11-25 10:50:20 · 1100 阅读 · 0 评论 -
iOS调用系统的分享的两种方式
两种方案各有各的好处,具体使用细节可运行demo后查看,源码有两个文件1、ViewController.h#import @interface ViewController : UIViewController@property (weak, nonatomic) IBOutlet UIButton *openIn;@property (weak, nonatomic) IBOu原创 2016-08-08 17:05:55 · 4813 阅读 · 0 评论 -
OC语言实现指纹识别
简单实现指纹识别的方法,大虾勿喷~1、引入类#import 2、实现方法- (void) anthTouchID:(NSString *) describe complete:(void(^)(NSString *backStr)) complete{ //检查操作系统是否达到指纹识别要求 if([[[UIDevice currentDevice] systemV原创 2016-04-07 13:42:35 · 1986 阅读 · 0 评论 -
Cordova for iOS-插件开发(三)
接上一篇文章,本部分实现js部分config.xml文件中插入下面代码,建立原生与js之间的桥接 js的目录结构如上图所示,需要用到三个文件,device.html、device.js、jquery-1.12.4.min(这个可以直接去官网下载)。下面提供html的文件内容和js文件的内容 Cordova原创 2016-05-24 16:10:41 · 555 阅读 · 0 评论 -
轮播器(二)--采用两个ImageView和UIScrollView实现图片无限轮播
此篇文章介绍采用两个ImageView来实现无限轮播的方法,用于优化前篇的图片轮播#import @protocol CarouselDelegate //点击事件-(void)clickedAtIndex:(NSInteger)index;@end@interface CarouselView2 : UIView//代理@property(assign,nonatom原创 2017-04-10 13:33:05 · 782 阅读 · 0 评论 -
轮播器(三)--采用UICollectionView实现图片无限轮播
此篇介绍另一种图片轮播器的优化,采用UICollectionView来实现,因为系统已经为UICollectionView做好了优化#import @protocol CarouselDelegate //点击事件-(void)clickedAtIndex:(NSInteger)index;@end@interface CarouselView : UIView//代理原创 2017-04-10 14:18:16 · 632 阅读 · 0 评论 -
基于MobileVLCKit的视频播放器的二次封装
Demo地址:https://github.com/xttxqjfg/videoDemo,喜欢的可以星星~为了适应项目的需要,参照网上的例子,对MobileVLCKit做了一个二次封装。主要功能有全屏、关闭全屏、自动全屏、暂停、播放、快进等基本功能。项目中用到的是pods来集成MobileVLCKit。pods中的包下载下来在本地看有700多M,集成时保证好网络环境,不然要等很久,不过这700M不...原创 2017-04-12 10:08:13 · 4762 阅读 · 2 评论 -
iOS10通知(七)--Notification Content Extension
上一篇介绍了如何用Notification Service Extension来实现修改收到的消息内容,这一篇介绍使用Notification Content Extension来实现自定义的通知界面。工程中用到了SDWebImage1、首先在工程中新增一个通知的内容拓展2、这个 extension 中有一个必须实现的方法 didReceiveNotification(),在系原创 2017-04-01 10:09:30 · 5530 阅读 · 3 评论 -
iOS10通知(五)--本地实现多媒体通知
iOS 10 中,开发者现在可以在通知中嵌入图片、音乐或者视频。为本地通知添加多媒体内容十分简单,只需要通过文件的NSURL创建一个 UNNotificationAttachment 对象,然后将这个对象放到数组中赋值给 content 的 attachments 属性就行了如果需要实现远程的多媒体通知,那就要用到下篇中的通知拓展,具体操作在下篇介绍,本片只介绍本地多媒体通知1、本地多原创 2017-03-31 16:52:34 · 2038 阅读 · 0 评论 -
iOS10通知(六)--Notification Service Extension
iOS 10 中添加了很多拓展 extension,与通知相关的拓展 extension 有两个:Notification Service Extension 和 Notification Content Extension。前者可以让我们有机会在收到远程推送的通知后,展示之前对通知内容进行修改;后者可以用来自定义通知视图的样式。Notification Service Extension 现原创 2017-03-31 17:18:09 · 7135 阅读 · 0 评论 -
iOS10通知(四)--带事件通知的发送和处理
所谓的带事件通知只是我的一个理解,原意是可交互的通知1、在NotificationHandle类中增加交互通知的实现方法//注册通知中的action事件-(void)registerNotificationCategory{ //带评论的通知事件注册 UNTextInputNotificationAction *inputAction = [UNTextInputNot原创 2017-03-31 16:23:46 · 1398 阅读 · 0 评论 -
iOS10通知(三)--通知的取消和修改
在创建通知时,我们可以指定标识符。这个标识符可以用来管理通知。在 iOS 10 之前,我们很难取消掉某一个特定的通知,也不能主动移除或者更新已经展示的通知。iOS 10 中,UserNotifications 框架提供了一系列管理通知的 API,你可以做到1、取消还未展示的通知2、修改还未展示的通知3、删除已经展示过的通知4、修改已经展示过的通知其中关键就在于在创建请求原创 2017-03-31 16:06:14 · 2712 阅读 · 0 评论