自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 资源 (16)
  • 问答 (1)
  • 收藏
  • 关注

原创 iOS UITableView上拉加载解决偶然跳动的Bug

iOS UITableView上拉加载偶发刷新列表跳动的Bug解决方法

2023-08-29 16:23:45 1048

原创 一次性处理全局键盘好用工具IQKeyboardManager

iOS项目中统一处理键盘遮挡、键盘回收释放等问题的解决方案,使用IQKeyboardManager小工具,希望能有所帮助。

2023-07-13 14:48:06 2095

原创 M1芯片的mac下的Xcode12以上版本编译报错 this target. for architecture arm64等问题解决方案

最近换了 mac M1芯片 开发,xcode12在运行旧项目报错 的问题xxxx building for iOS Simulator, but linking in object file built for iOS, xxxxx for architecture arm64上谷歌、百度翻个各种答案,修改 编译结构体、修改pods配置都不行。自己瞎倒腾给解决了....非常简单解决方案:1.打开访达,选择应用程序,右键打开xcode简介选择打开ressta 即可运..

2021-05-07 17:58:40 1231 2

原创 NSTimer使用时注意项总结

一、NSTimer使用方法:const NSTimeInterval TimeInterval = 1.0;@interface UIViewController ()// 定义属性timer@property (nonatomic, strong) NSTimer *timer;@end/** * timer 初始化 * repeats:参数表示是否重复执行(YES表示每TimeInterval秒运行一次function方法。NO表示不重复只调用 一次,timer运行一次就会自动停

2020-11-11 22:15:43 268

原创 Carthage与CocoaPods的区别和使用步骤

Carthage是什么?主页:Carthage:https://github.com/Carthage/Carthage 目标:Carthage旨在使用最简单的方式来管理Cocoa等第三方框架。 原理:自动将第三方框架编译为动态库(Dynamic framework)。 优点:Carthage为用户管理第三方框架和依赖,但不会自动修改项目文件或构建设置,开发者可以完全控制项目结构和设置。 缺点:只支持iOS 8.0+,不能用来开发iOS 8.0以前的项目。Carthage与CocoaPods的

2020-07-10 14:53:52 779

原创 iOS第三方管理工具Carthage的安装和使用

iOS目前主流的第三方管理工具是Cocoapods和Carthage,之前项目都是使用Cocoapods,虽然使用方法简单方便,但是也具有一定的弊端,侵入型太强,直接修改了我们工程的结构和配置,整个工程的文件结构被弄的很凌乱。Carthage作为一个轻量级的工具,他的好处就是不会对你的工程结构做任何的修改,没有侵入性。 Carthage的工作原理是从Cartfile描述文件中读取第三方框架的网络地址并下载,然后通过Xcode编译成framework动态库,我们使用的时候直接导入动态库就好了...

2020-06-29 11:17:42 425

原创 2020苹果WWDC大会要点总结

6 月 23 日北京时间凌晨1点,苹果2020WWDC在加州总部的乔布斯剧院举行,这次的WWDC以线上的方式举行。此次 WWDC 将会有Arm架构的苹果芯片、iOS版本的提升以及头戴式耳机AirPodsStudio的发布。1.新版本iOS14在主屏幕、小组件、短信功能、地图等方面作出更新和完善。据苹果介绍,为了解决用户下载应用数量的增加,苹果推出App Library,能够让用户更加容易地控制页面与分类主屏幕应用,让管理应用不再繁琐。另外,用户可在主屏的小区域上叠加多个小工具,甚至可...

2020-06-23 16:19:26 726

原创 Xcode图片素材Slicing处理(包括缩放和延伸)

一、需求背景在项目开发中,在UI切图不全的情况下,我们可以通过放大缩小图片某个区域适配各种机型防止背景图片变形。iOS可以通过UIImage的方法resizableImageWithCapInsets切片设置图片的可拉伸区域,也可以通过slicing(基于OS7以上的 并且用Media.xcassets管理图片)可视化的制定图片的可扩展和不可变区域 。(而我所遇到的问题是, 设置聊天对话框, 会随着聊天文字内容而横向和纵向的变化)二.首先讲iOS中的切片缩放iOS的图片Slicing,同等于Andr

2020-05-22 17:19:00 771

原创 ScrollView不滚动的原因分析和解决办法

iOS搭建界面时经常用到UIScrollView,但是经常遇到ScrollView不能滚动的问题。 按照一般的解决思路去寻找原因:1.检测ScrollView的scrollenabled是否为YES;2.检测ScrollView的userInteractionEnabled是否为YES;3.检测代码中有没有设置ScrollView的ContentSize,并且比ScrollV...

2020-01-19 15:28:13 5025

原创 iOS开发SDK需要注意的几点总结

1. 修改类别文件名及类别方法。开发SDK时通常会用到比较多的第三方的类别方法, 这样的话, 开发者在使用你的SDK时, 因为他可能也会加一些第三方的开源库, 比如都使用了NSString的md5类别文件。 由于这两个文件都是从网上下载来下的, 所以文件名是一样的。 这样在编译时就会报错。 然后就想到要去修改这个类别文件名, 等修改类别文件名后。 发现类别中的方法名是一样的, 而ios在调用两...

2019-12-27 16:01:17 306

原创 iOS13新增SceneDelegate文件适配

xcode11创建项目新增SceneDelegate文件,AppDelegate文件结构也发生变化,在AppDelegate.h文件中没有了window属性,而是在sceneDelegate.h中,可见AppDelegate不管理window而是交给SceneDelegate。由于这些是ios13新增,所以SceneDelegate在ios13以下的系统是不支持。所以xcode11创建的项目如要做...

2019-11-27 13:10:32 696

原创 iOS13适配StatusBar

上篇文章总结了几个iOS13的新特性,今天来说说今天上午适配项目的时候,遇到的第一个问题,StatusBar的适配遭遇了crash。现在说说如何解决。获取StatusBar项目中通过StatusBar来获取手机当前状态,但是在iOS 13中便获取不到了,调试了一下发现是UIApplication无法获取到statusBar。 UIApplication *app = [UIAp...

2019-11-27 13:03:00 1838

原创 开发者需要知道的iOS13新特性

一.Dark Mode首先说万金油适配方法,如果希望在iOS依旧保持原来的样子,就在plist文件增加key-value,如图1.)全局适配不设置背景颜色的视图,背景颜色会根据系统设置的模式改变iOS13中uiviewcontroller和uiview新增了overrideUserInterfaceStyle属性,通过设置这个属性可以改变vc或view本身及其子视图的模式(light...

2019-11-27 12:48:55 540

原创 Mac下修改文件的md5值

苹果机审是马甲包混淆被打回来的一大障碍,机审一般是比较文件的md5是否一致,所以我们单单修改文件的名称是不够的,需要我们批量修改工程中图片等文件资源的md5值。下面总结一下如何用终端修改文件的md5值。1、查看 md5 值打开 Terminal (终端),输入「md5」,空格,文件路径,最终命令类似于$ md5 文件路径 例:$ md5 /Users/wangyongzhi...

2019-06-18 10:16:54 2101

原创 Flutter框架概览

Flutter是什么?首先附上flutter中文网。Flutter是一款移动应用程序SDK,一份代码可以同时生成iOS和Android两个高性能、高保真的应用程序。Flutter目标是使开发人员能够交付在不同平台上都感觉自然流畅的高性能应用程序。我们兼容滚动行为、排版、图标等方面的差异。这是一个来自Gallery的演示应用程序, 您可以在安装Flutter并设置好环境后运行Flut...

2019-06-17 14:56:45 258

原创 iOS性能、内存分布与TaggedPointer

iOS中的五大内存区域iOS中的内存区域从低地址到高地址分别为 .text段(代码区)、.data段(已初始化的全局变量、静态变量)、.bss段(未初始化的全局变量、静态变量)、堆区、栈区。image.png保留段:用于给系统提供一些必要的空间;内核区:由系统使用;这里说明一点:栈区从上往下走,堆区会从下往上走,当两个相遇的时候,则会发生堆栈溢出。 // 一...

2019-06-17 14:34:44 488

原创 Mac下安装python3并配置Python2和Python3相互切换使用

mac系统自带python,可以通过python -V查看,python版本为2.7.10,当然想用python3的小伙伴们也不要着急,按照下面步骤即可在不删除系统自带python的情况下安装python3hulk python -VPython 2.7.10一、安装套件管理工具homebrew直接登陆homebrew官网,复制链接安装即可,很简单,之后可以查看是否安装成功:...

2019-06-17 14:28:40 1231

原创 ios12后获取iOS设备WiFi名字和mac地址

苹果提供了NetworkExtension框架让开发者实现VPN以及WiFi热点相应的功能,虽然iOS9系统出来之后,这个框架的很多功能被苹果屏蔽了,需要申请权限才能用,但是本篇简单的获取WiFi名字和mac地址信息的方法还是可以用的。获取WiFi相关信息的时候需要引入一下头文件#import <SystemConfiguration/CaptiveNetwork.h>#im...

2019-06-17 12:02:25 2546

原创 ReactiveCocoa 源码架构一览

ReactiveCocoa 是一个非常复杂的框架,在正式开始介绍它的核心组件前,我们先来看看它的类图,以便从宏观上了解它的层次结构:1451960390500209.png从上面的类图中,我们可以看出,ReactiveCocoa 主要由以下四大核心组件构成:信号源:RACStream 及其子类; 订阅者:RACSubscriber 的实现类及其子类; 调度器:RACSchedu...

2019-06-17 11:47:49 346 1

原创 分析ReactiveCocoa 中 RACCommand底层实现

今天总结一下非常好用的ReactiveCocoa框架。而且结合MVVM非常实用和方便。在使用ReactiveCocoa 过程中,除去RACSignal和RACSubject这些信号类以外,有些时候我们可能还需要封装一些固定的操作集合。这些操作集合都是固定的,每次只要一触发就会执行事先定义好的一个过程。在iOS开发过程中,按钮的点击事件就可能有这种需求。那么RACCommand就可以实现这种需求...

2019-06-17 11:40:41 343

原创 iOS中的触摸事件 事件传递及响应链

ios中的其他ui控件,如UIWindow,UIButton,UIlabel等都是继承自UIView,也就是说,他们的响应事件也是如UIView一样,由UIResponder负责,比如,单指点击,滑动,缩放等,而其中则是由The Responder Chain负责各种交互在不同层次的传递与判断由谁响应。在官方文档中介绍了如何寻找hit-test view 和 first responder o...

2019-06-17 11:32:25 590

原创 Runtime知识点总结

Runtime和Runloop一般是iOS面试中必问的知识点,虽然平时开发用到的场景不多,但这也是iOS开发人员必须要掌握的知识技能之一。Runloop的概念和应用在之前的博客中已经有两篇来总结了,下面是来说一下runtime。给大家推荐一份资料,上面总结的runtime相当不错!附上链接:Runtime介绍PDF篇...

2019-06-17 11:16:47 158

原创 Runtime的应用场景

1、动态给分类添加属性这个应该使用的比较频繁,通过runtime动态添加属性,可以给系统类添加自定义属性,灵活使用,可以带来神奇的效果。//(block直接调用手势的action)+ (instancetype)mm_gestureRecognizerWithActionBlock:(MMGestureBlock)block { __typeof(self) weakSelf ...

2019-06-17 11:11:05 237

原创 RunLoop(二)常见实际应用场景

实际应用场景:Timer定时器问题我们在vc中创建一个定时器,然后在view上面添加一个滚动视图,比如说scrollView,可以发现在scrollView滚动的时候,timer定时器会卡住,停止滚动之后才重新生效。这个问题比较简单,也是我们经常遇到的。因为定时器默认是添加在了RunLoop的NSDefaultRunLoopMode模式下,scrollView在滚动的时候会进入UI...

2019-06-17 11:03:32 607

原创 RunLoop的内部实现

一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。如果我们需要一个机制,让线程能随时处理事件但并不退出,通常的代码逻辑 是这样的: function loop() { initialize(); do { var message = get_next_message(); process_me...

2019-06-17 10:57:00 321

原创 iOS Framework制作流程

由于公司需求,需要制作自己的登录界面SDK和根据需求更换项目路径的SDK,所以研究了一下静态Framework的制作步骤,总结如下:(另外.a的制作其实与.framework的制作过程类似,可自行去研究和尝试) 新建工程选择iOS —> Cocoa Touch Framework 进入创建好的工程删除掉自带的工程同名头文件 ...

2019-06-11 14:14:39 330

原创 终端判断Framewrok是动态库还是静态库

1.打开终端2.cd到目标Framework文件夹3.使用file命令file xxxx(xxxx为Framework文件夹中的执行二进制文件)你会看到以下信息动态库输出信息:XXXXSDK: Mach-O universal binary with 4 architectures: [i386:Mach-O dynamically linked shared librar...

2019-06-05 16:53:35 825

原创 iOS软件包ipa重签名

ipa是iOS系统app安装包,如果我们想对App Store上的软件进行修改然后重新安装到手机上、或者对已有的APP进行企业分发而不更改包名、或者手机上安装多个相同的APP等都需要进行重签名。1.准备一个mobileprovision描述文件,可以从开发者账号下载或者从Xcode中导出。将准备好的xxx.mobileprovision文件重名为embedded.mobileprovisio...

2019-06-04 14:31:25 550

原创 iOS编程代码规范

一. 核心原则原则一:代码应该简洁易懂,逻辑清晰因为软件是需要人来维护的。这个人在未来很可能不是你。所以首先是为人编写程序,其次才是计算机:原则二:面向变化编程,而不是面向需求编程。需求是暂时的,只有变化才是永恒的。本次迭代不能仅仅为了当前的需求,写出扩展性强,易修改的程序才是负责任的做法,对自己负责,对公司负责。原则三:先保证程序的正确性,防止过度工程过度工程(over...

2019-06-04 10:32:24 348

原创 iOS拆包准备获取ipa包及资源文件

要获得线上APP的ipa文件,现在有以下几种方案1.通过PP助手下载安装到手机的应用2.通过iTools助手下载安装到手机的应用3.通过Apple Configurator 2(Mac商店)获取前两种方案网上的教程很多,这里只介绍第三种方案首先 去Mac上的App Store下载Apple Configurator 2。然后把iphone连接上Mac,点击Apple Con...

2019-05-27 13:45:29 4066

原创 App Delegate的相关总结

1.告诉代理,启动基本完成程序准备开始运行。程序首次已经完成启动时执行,若直接启动,launchOptions中没有数据;否则,launchOptions将包含对应方式的内容。- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions...

2019-01-25 11:41:33 221

原创 WKWebview与JS交互的问题

    首先向大家推荐一篇文章关于iOS与js交互知识点的总结,个人认为有助于大家记忆和理解,感谢作者的整理。https://github.com/Haley-Wong/JS_OC    关于OC与JS交互方法,我主要使用的是WKWebview,所以js调用oc方法并传值,oc调用js方法并传值,我使用的是MessageHandler。JS_OC_MessageHandler是利用WKWe...

2019-01-16 14:59:55 3652

原创 App之间的数据共享App Group

在实际的开发中,我们也许会有这种需求:公司的旗下有两个App,当客户已经登录一个App A的情况下,再登录另一个App B时,B不再需要繁琐的登录过程就可以直接使用A已经登录的信息。但是iOS系统下有这么一个安全机制:每个应用都有自己对应的沙盒,每个沙盒之间都是相互独立的,互不能访问(没有越狱的情况下)。这种情况,我们应该怎么处理呢?(当然,我是由通知扩展和主程序BundleID要求不一样,所以...

2018-12-24 16:22:41 2015

原创 iOS后台实现推送并语音播报,程序杀死仍获得推送并语音播报

其实网上这种Notification Service Extension的代码很多,大家搜搜就能顺利写出来,下面我只是单纯记录一下,以便以后再次用到:用Notification Service Extension实现APP在后台能获得推送通知并语音播报,以及程序杀死仍获得推送并语音播报的方法:(当然需要解决iOS12.1的语音播报问题,还要参考我上一篇文章,这篇文章其实是上篇文章iOS12.1...

2018-12-24 16:07:00 1523

原创 iOS12.1之后语音播报问题解决方案总结

    目前公司的项目是一个类似于送快递的项目,所以免不了有类似于饿了么、美团、支付宝收钱吧这种,"您有新的订单","您的收益到账啦"这种类似的推送,这种推送还设计语音播报出来的功能。产品要求APP在前台、后台、程序杀死后都要收到推送消息和语音播报,之前也早早的做了这个功能,就是用的大家常用的方法NotificationService。但是项目升级了iOS12.1后,语音不播报了。    最开...

2018-12-24 15:56:19 3736 4

原创 WKWebView代理方法解析

今天看一下WKWebView的两个协议:WKNavigationDelegate 和 WKUIDelegate。一、WKNavigationDelegate#pragma mark - WKWebView NavigationDelegate//WKNavigationDelegate- (void)webView:(WKWebView *)webView decidePolicy...

2018-11-16 10:25:55 1147

原创 iOS接入支付宝支付SDK遇到编译错误

接入AliPay后,编译报错:Undefined symbols for architecture arm64: "_OBJC_CLASS_$_类名", referenced from前不久刚在一个项目里接入过支付宝支付,就是把AliPaySDK.bundle和AliPaySDK.framework两个导入工程,然后再添加相应的依赖库,没有出现任何报错,但今天再次用同样的方法导入支付宝时,居然...

2018-11-13 09:47:58 1071

原创 NSArray与NSMutableArray应该使用copy还是strong?

先说标题的正确答案:@property (nonatomic,copy) NSArray *immutableArray;@property (nonatomic,strong) NSMutableArray *mutableArray;其他集合:NSArray,NSDictionary,NSSet -&gt; copyNSMutableArray,NSMutableDi...

2018-11-06 14:16:41 1915

原创 iOS实现微信第三方登录

一、接入微信第三方登录准备工作。移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的移动应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。(注意)1、下载iOS微信SDK。(自己去微信开放平台下载,并集成进项目,若之前项目...

2018-11-06 10:54:45 914

原创 iOS开发之NS_ASSUME_NONNULL_BEGIN和 NS_ASSUME_NONNULL_END

    最近使用新更新的Xcode10.0新建类时,发现它自动为我们在.h文件里添加了NS_ASSUME_NONNULL_BEGIN和 NS_ASSUME_NONNULL_END。如下示例:#import &lt;UIKit/UIKit.h&gt;NS_ASSUME_NONNULL_BEGIN@interface WechatLoginBindPhoneController : UI...

2018-11-06 10:38:47 925

AFN网络请求封装工具类

这是一款对AFNetworking网络请求的封装的工具类,包括get请求方法和post请求方法,使用方便,直接套用在项目中。欢迎下载使用!

2019-06-11

AVPlayer封装成SBPlayer视频播放器

这是一款封装好的、超好用的视频播放器,可以播放本地视频资源,也可以播放在线资源,有横屏、竖屏、全屏界面转换操作。

2019-06-11

代码混淆工具addJavaPython和java工具

这是给iOS工程添加混淆代码、垃圾代码时用到的python工具类,还有一个java工具类,两种方式都可以自动刚生成垃圾代码,亲测有效,欢迎下载使用。

2019-06-11

iOS制作FrameworkDemo

这是我制作Framework的源文件,里面是一个例子的framework。

2019-06-11

GCD 总结-队列和任务的理解

GCD 是苹果开发的应对多核编程,本实例总结了 GCD 三种队列的获取和创建,以及两种执行任务的方法。

2016-05-06

地图切换器

本实例的功能是实现3种地图类型的相互切换。当使用选择其中一个地图类型后,就会显示相应的地图类型。

2016-04-30

Masonry 入门常用方法-1

Masonry是 iOS 屏幕适配目前最流行的AutoLayout框架.此 Demo 讲解了Masonry 几种常用的方法。

2016-04-16

Safari 打开 URL

本实例实现的功能是在 Safari应用程序中打开指定的 URL。当用户单击按钮后,就会弹出分享列表,选择其中的 Open In Safari 动作就会在 Safari 中打开指定的 URL。

2016-04-12

系统短信发送 Demo

调用 iOS 系统短信,发送短信的功能。

2016-04-12

自定义相机界面

iOS 调用相机接口,可以自定义相机界面,本 demo 包含了一些代理方法和自定义的方法的实现。

2016-04-10

在 Safari 中打开 URL

在 Safari 中打开 URL

2016-04-10

自定义相机

自定义相机

2016-04-10

更改应用程序的背景

iOS 开发实战宝典之更改应用程序的背景篇

2016-04-09

图片点击放大 Demo

iOS 开发实战宝典之点击看大图篇

2016-04-09

贝塞尔曲线画特殊线条总结

网上关于贝塞尔曲线画图的代码总结,每种注释都是一种方法。

2016-04-09

iOS 开发之视频+弹幕渲染库-Demo

iOS 开发中,用 MPPlayer做的视频播放器,有一层弹幕渲染。弹幕渲染是引用的别人的,在 github 上有。地址:一个 iOS 上的弹幕渲染库. https://github.com/unash/BarrageRenderer

2016-04-09

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

TA关注的人

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