
OC
王 哪跑!!!
分享技术所想,分享技术所用,分享技术所感
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
iOS View添加四周阴影
在开发过程中,给一个View添加阴影效果可能会经常遇到,那我们如何实现一个简单的阴影效果呢?代码如下:/// 添加四边阴影效果+ (void)addShadowToView:(UIView*)shadowView{ shadowView.layer.masksToBounds = NO; shadowView.backgroundColor = [UIColor whiteColor]; shadowView.layer.shadowColor = [UIC原创 2021-06-02 10:10:10 · 2345 阅读 · 0 评论 -
iOS 常用的保存图片的两个方法
第一种、就是保存到系统相册中,这个也是最简单的,当然用户想要访问系统相册也是需要权限的,需要用户同意。在Plist文件加入下面的键值对就可以了key : Privacy - Photo Library Usage Description value:字符串即可(例如:需要使用手机相册)加入完成以后就是保存图片的方法#pragma mark -- <保存到相册...原创 2018-11-07 15:24:32 · 1391 阅读 · 0 评论 -
iOS 分割输入验证码的视觉效果
通常情况下,在用户注册或者登录的时候我们会用到手机验证码,而有时就会需要,分割输入验证码的视觉效果。那这种情况,我们怎么实现呢?在网上查了很多,好多都只是给了实现代码,给的东西都不是很详细,粘贴过来,有好多值不知道是从哪里来的,还有的就是需要第三方,但是第三方代码量就太多了,会使程序变大,虽然影响不大,但是完全没有必要下面时我结合网上和自己实现代码,下面配有demo下载链接先看原创 2018-01-26 15:22:56 · 2267 阅读 · 0 评论 -
iOS 文件下载(离线下载、断点下载)
今天客户又为现在开发的项目增加的新的需求,要求可以下载视频文件,支持离线下载、断点下载。没办法客户是大爷,让干什么就得干什么,所以只能去写bug了。现附上本文的demo我的项目我使用的是NSURLSession进行文件下载,同时为了不让客户忽然间又来别的需求,这里我直接写好了三种下载方式。typedef NS_ENUM(NSInteger, URLSessionDownload) { URLSessionDownloadDefault,//默认下载方式,无法支持离线和暂停原创 2021-04-01 19:29:42 · 1737 阅读 · 0 评论 -
iOS 防止系统截屏获取关键信息
今天开发客户忽然来了需求,禁止用户截取app内的二维码。我当时一听就懵逼了啊,截屏可是系统级别的,开发肯定是没有那么大的开发权限的,我当时就向客户反应,可是大家都知道,甲方是大哥,然后就没然后了,我这里也被逼无奈只能去对应了。其实禁止截图没有任何意义,因为完全可以其他手机拍照,所以客户这个需求没啥用,但是客户既然说要有,我也没有办法然后开始查找有没有什么监听截图的事件,果然被我发现了。第一种UIApplicationUserDidTakeScreenshotNotification (可以使.原创 2021-03-18 15:36:25 · 6405 阅读 · 2 评论 -
iOS RunLoop 详情总结
runloop介绍RunLoop 很好理解,字面上就知道它是干什么的,Run 表示运行,Loop 表示循环,意思很明确就是不停的循环运行其实RunLoop的本质还是一个对象,然后这个对象在循环中用来处理程序运行过程中出现的各种事件(比如说触摸事件、UI刷新事件、定时器事件、Selector事件),从而保持程序的持续运行。RunLoop 在没有事件处理的时候,会使线程进入睡眠模式,从而节省 CPU 资源,提高程序性能。注意:这里的没有事情处理并不是销毁RunLoop,而是进入休眠状态,当在此接到任原创 2021-02-20 10:27:51 · 326 阅读 · 0 评论 -
iOS 弱引用weak的使用
OC开发过程中,我们经常会使用到弱引用和强引用我们为什么要使用弱引用呢?要想知道这个我们需要weak的原理。原理:Runtime维护了一个weak表,其实weak是一个hash(哈希)表,其中key表示指向对象的指针,value是一个数组,里面存储的weak指针的地址数组,当我们使用__weak的时候,我们会先查找有没有这么一个表,如果没有,我们会直接创建这个表,并把对应内容写入,如果存在,他会直接写入对应内容那为什么value是个数组呢?因为一个对象地址可能对应多个weak指针地址那.原创 2021-01-28 10:38:29 · 945 阅读 · 0 评论 -
iOS 根据规则(服务器返回数据)跳转到指定的界面
在开发过程中我们经常会遇到对接推送,推送的类型可能有很多种1、接到推送,我们跳转到推送内容的详情页面2、接到推送,我们跳转到一个网页......还有很多的情况,这个时候我们就要根据数据类型的不同进行判断,但是如果页面有很多我们就要写一大堆if else判断或switch判断。 这样做就显得很low了,而且不是非常的灵活了,而且后续如果我们增加其他页面的跳转就更不好处理了。这个时候我们就需要Runtime来实现。首先,我们要和后台定义后一个规则,这个规则不要去轻易变动例如:@原创 2021-01-25 15:20:41 · 382 阅读 · 0 评论 -
iOS 数组转字典
在开发过程中,这种情况基本是遇不到的,但是有的时候我们在写请求的时候会需要数据类型的参数例如:AFNetworking POST请求,参数为字典类型,但是我们的数据确实数组,没有任何的key、value关系,这个时候我们要怎么做呢,就是想办法将数据转成字典即可将数组转成字典其实很简单,下面直接上代码。NSError *parseError = nil;NSData *jsonData = [NSJSONSerialization dataWithJSONObject:@[@"你的数组参数"]原创 2021-01-14 10:19:28 · 1515 阅读 · 0 评论 -
iOS GCD定时器的使用
其实定时器我们有很多创建形式NSTimer、GCD等,今天我来说一下GCD版本的定时器首先,什么是GCD呢?百度一查一大堆Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。它是一个在线程池模式的基础上执行的并发任务。在 Mac OS X 10.6 雪豹中首次推出,也可在 iOS 4 及以上版本使用。为什么使用GCD呢?因为使用 GCD 有很多优势1、GCD.原创 2021-01-13 10:30:04 · 520 阅读 · 0 评论 -
iOS AFNetworking POST、GET等5种请求的二次封装
这里使用到了常用的全局Block,可以写pch文件中typedef void (^ReturnValueBlock) (id returnValue);typedef void (^ErrorCodeBlock) (id errorCode);typedef void (^FailureBlock)(void);typedef void (^NetWorkBlock)(BOOL netConnetState);下面就是5种请求常用的封装GET#pragma mark -#pra原创 2021-01-08 17:23:42 · 1374 阅读 · 0 评论 -
iOS 后台永久保活,亲测有效
一想到后台保活,我们最常见的就是音乐播放软件了,那在我们不是音乐软件的情况下我们要如何后台保活呢?首先我们就要在Background Modes把音乐对应权限打开。这个权限打开后,我们的工作就已经完成了1/3了接下来我就就要在app进入后台的时候开始播放无声音的mp3。我这里对音乐播放器进行了简单的封装,方便使用SXAudioSessionObject.h#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_B.原创 2020-12-31 10:01:58 · 6711 阅读 · 2 评论 -
iOS WebSocket 链接
今天公司用到了WebSocket长链接,查了一下资料最后得到了解决这里我们需要使用一个第三方库,我们需要引用一下SocketRocket我们最好使用pod方式引入,如果直接拖拽到项目中会发现异常报错可以使用podpod管理库, 在podfile中加入pod 'SocketRocket'在使用终端cd到当前工程 安装pod install倒入工程后就是使用了,正常很多第三库为了方便使用我们都会在这个基础上进一步封装,这里我们也对其再次封装。下面到了大家最喜欢的环节,就原创 2020-12-16 09:59:07 · 876 阅读 · 0 评论 -
iOS MJRefresh适配ios11以及iPhoneX
MJRefresh 是配iPhone异形曲面屏找到UIScrollView+MJExtension然后在找到- (void)setMj_insetT:(CGFloat)mj_insetT然后将这方法改成下面样子即可- (void)setMj_insetT:(CGFloat)mj_insetT{ UIEdgeInsets inset = self.contentInset; inset.top = mj_insetT;#ifdef __IPHONE_11_0原创 2020-12-14 13:44:43 · 492 阅读 · 0 评论 -
iOS FMDB框架的使用以及简单的封装
在开发过程中,我们经常会使用到手机本底数据库的使用,但是数据库的使用,在app也只是基本的增删改查而已。FMDB一个很好的数据库框架,为我们开发提供更好的操作。首先我们想导入一下FMDB,有两种方式第一种Cocoapods安装pod 'FMDB'第二种我们只需要直接将FMDB拖入到工程即可,附上下载链接FMDB GitHub链接:https://github.com/ccgus/fmdb这就两种安装方式,安装完成后我们,需要倒入一个依赖sqlite3.0.tbd.原创 2020-12-11 10:37:43 · 801 阅读 · 0 评论 -
iOS 佛祖保佑,永无bug等有意思的注释
复制://// _ooOoo_// o8888888o// 88" . "88// (| -_- |)// O\ =...原创 2018-12-10 10:51:07 · 1169 阅读 · 0 评论 -
iOS 获取当前手机所在页面控制器,返回指定页面
在开发过程中有时候我们会使用到获取当前所在页面的控制器那我们如何获取当前控制器呢-(UIViewController *)topViewController{ UIViewController *controller = [self topViewControllerWithRootViewController:[self getCurrentWindow].rootVie...原创 2018-09-29 16:29:43 · 763 阅读 · 0 评论 -
iOS error: couldn‘t remove ‘***‘ after command failed: Directory not
今天打开一个老项目忽然出现上述问题。上述问题的可能行有很多。第一种解决方案选择Xcode->File->Product Setttings,将Build System 设置成Legacy Build System即可不过这种方式在我这里并没有解决,于是我又找了另一种方案第二种方案其实这个报错完整方案应该是限免这样error: couldn't remove '/Users/xxx/Library/Developer/Xcode/DerivedData/xxxx/B.原创 2020-10-19 11:53:28 · 373 阅读 · 0 评论 -
iOS 调整图片尺寸和大小的两个方法
在开发过程中,我们经常会遇到图片压缩功能,下面是我写的图片压缩的两个方法首先是第一种,也是我比较推荐的/// 调整图片尺寸和大小/// @param sourceImage 原始图片/// @param maxImageSize 新图片最大尺寸/// @param maxSize 新图片最大存储大小(kb)+ (UIImage *)reSizeImageData:(UIImage *)sourceImage maxImageSize:(CGFloat)maxImageSize maxSi原创 2020-10-10 13:29:13 · 3235 阅读 · 1 评论 -
iOS 获取视频的缩略图(视频的第一帧)
首先我们要导入三个官方的库#import <AVFoundation/AVAsset.h>#import <AVFoundation/AVAssetImageGenerator.h>#import <AVFoundation/AVTime.h>导入这三个库就是获取的方法了,一中是本地的视频,另一种是网络视频// 获取视频第一帧...原创 2018-09-12 20:43:42 · 4179 阅读 · 0 评论 -
iOS AppDelegate后缀.m改成AppDelegate改成.mm时出现报错
再实现百度地图POI城市检索时,我们需要导入百度SDK以及相关的库,在导库成功后,编译的时候会出现报错信息,这时我们需要将在Xcode中在路径Build Settinngs -> Compile Sources AS 中选择Object-C++或者将任意一个文件.m的后缀改成.mm,通常情况下我们会将AppDelegate改成.mm,但是由于本人实际操作,将Compile Sources AS 中原创 2016-11-28 15:41:40 · 5294 阅读 · 0 评论 -
iOS “_OBJC_CLASS_$_***“, referenced from: objc-class-ref in QRCodeDis
在开发过程中我们经常引入第三方库,同时就会出现"_OBJC_CLASS_$_TCGenerateCode", referenced from: objc-class-ref in ***这个问题。网上有很多解决方案,但是对我的项目来说都没用,各种修改完成依旧是这个报错。第一种,也是常见的错误解决,但是这个没有解决我的报错问题1、.m文件没有导入 在Build Phases里的Compile Sources 中添加报错的文件2、.framework文件没有导入静态库编译时往往需要一些..原创 2020-09-04 12:04:22 · 1755 阅读 · 0 评论 -
iOS 二维码扫描以及二维码生成
二维码扫描在开发过程中,我们经常会遇到二维码扫描功能,下面是iOS原生扫描二维码的实现类名:ScanViewController.h 文件#import <UIKit/UIKit.h>#import <AVFoundation/AVFoundation.h>@interface ScanViewController : UIViewController<AVCaptureMetadataOutputObjectsDelegate,UIImagePick原创 2020-09-03 15:59:07 · 657 阅读 · 0 评论 -
iOS 检测设备所连接的WiFi、4G等网络是否真的可以连通
在开发过程我们经常会遇到,获取手机连接的WiFi、4G等状态,并且判断是否连接网络,通常我们使用AFNetworking、Reachability等库,只要判断连接上WiFi或者4G就表明他已经连接网络并使用,但是有时候我们所连接的网络虽然有状态但是不代表一定网络可以连通,显然这两个库并不一定满足我们的使用。所以我在网上查到一位博主发的一个帖子,经测试这个方法确实可用。//测试网络是否同的连接#define kAppleUrlTocheckWifi @"http://captive.apple.co原创 2020-08-24 16:46:20 · 1754 阅读 · 1 评论 -
iOS 导航返回到指定页面、一次返回到根试图或者让它一次性pop出几个页面
第一个,返回指定页面[self.navigationControllerpopToViewController:[[AuthenticationCodeVCalloc]init]animated:YES];还有一种, UINavigationController *navVC =self.navigationController; N原创 2018-01-31 13:51:34 · 4766 阅读 · 0 评论 -
iOS 获取设备型号(最新机型11、11 Pro、11 Pro MAX等)和App版本号等信息 以及获取是否是刘海屏
首先获取设备型号 APP版本的操作 下面便是获取手机的型号 // 获取当前App的基本信息字典 NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; //app名称 NSString *app_Name = [infoDictionary objectForKey:@"...原创 2018-09-15 15:08:44 · 4537 阅读 · 0 评论 -
iOS [UIApplication sharedApplication] openURL等常用的方法使用例如:打电话、定位等
1、打电话[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://电话号码"]];2、发短信[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://电话号码"]];3、去设置设置APP定位权限NSURL ...原创 2018-09-29 16:53:59 · 3724 阅读 · 0 评论 -
iOS 商品旋转加入购物车动画,并附带抖动效果
最近在开发一个商城类app,需要一个加入购物车一个动画效果,自己写会很麻烦,我就在网上找了一些资料最后实现了想要的效果,这个实现主要就是iOS提供的动画库:CAAnimation实现效果如下:下面就是实现代码,只有一个类PurchaseCarAnimationTool.h文件typedef void (^animationFinisnBlock)(BOOL finish);#define ScreenWidth [UIScreen mainScreen].bounds.size.wi原创 2020-08-03 13:36:53 · 769 阅读 · 0 评论 -
iOS 获取当前时间、明天时间以及其他相关的时间
开发过程中,我们开会经常用用到获取当前时间、明天的常用的方法。下面是我总接的获取时间相关的常用的方法,当然了为了方便大家使用,我写成了类方法(+方法),希望对大家有所帮助。/**获取当地当前时间@return 时间字符串*/+ (NSString *)getCurrentTime { NSDateFormatter *formatter = [[NSDateFormatter all...原创 2018-06-16 18:37:06 · 2801 阅读 · 0 评论 -
iOS 封装 加载成功打勾和打叉状态动画
想必大家在加载过程中经常会遇到加载成功或者加载失败后进行一个动画提示,例如:加载完成或者加载失败变成对号或者句号。这个方法我也是看了别人的项目,但是他的项目少了一部分代码,我这里给补上了。下面就是这个动画的的效果这个左面是成功动画、有面是失败动画下面是代码,稍后我也会附上下载封装的代码首先是AnimationView.h文件@interface AnimationView : UIView- (void)startSuccessAnimation;- (void)sta原创 2020-07-13 16:39:51 · 902 阅读 · 0 评论 -
iOS OC mvvm开发模式
相信大家对MVC开发都已经不陌生了,最经典开发模式MVC构成: M:model也就是数据模型 V:View视图 C:Controller控制器Model和View是相互独立的。View只负责页面展示,Model只是数据的存储,那么也就达到了解耦和重用的目的。而今天说的MVVM呢,其就是在MVC的变种而已,兼容MVC,那么他的构成: M:model也就是数据模型 V:View视图 VM...原创 2020-06-19 16:28:36 · 1509 阅读 · 0 评论 -
iOS UITextField输入框内容向下便宜
当我们在开发过程中相信很多人遇到UITextField内容向下便宜的现象,这个现象出现的版本是iOS10以上的问题,那我们要如何处理便宜呢。网上有很多解决方案,但是我感觉都不是很完美,因为他不能从根本上解决这个问题。知道我在网上找到了一个博客才发现这个方法,可以从根本上解决。大家都知道OC是一个面向对象的语音,他的方法等实现本质都是通知,而实现就是通过runtime实现,runtime可以说是OC语音的底层实现,Runtime是iOS的核心之一,我们写的OC代码底层都是由他实现的,经过遍译后,都是Run原创 2020-06-16 16:57:51 · 294 阅读 · 0 评论 -
iOS H5页面调用微信或者支付宝进行支付
一说支付,大多数人都会理解支付方式是下载微信和支付宝SDK进行支付,但是其实还有其他的方式,就是H5调用系统支付宝和微信进行支付。H5支付可能很多人认为是加载完页面剩下的就是页面完成即可,但是实际没有那么简单。下面介绍一下H5调用支付宝和微信支付。首先是支付宝,支付宝在支付这一块是非常专业的他的代码也是非常简单的。既然是H5调用,那么就少不了网址拦截。这里加载页面我是使用的WebView这里说一下,这里微信和支付宝都是使用这个方法里进行- (BOOL) webView:(UIWebVi原创 2020-06-16 12:08:35 · 4383 阅读 · 0 评论 -
iOS 解决WebView加载中文链接失败原因
在开发过程中经常会遇到使用webView问题,正常我们家在webViewNSURL* url = [NSURL URLWithString:[NSObject isEmptyOrNull:_linkString] ? @"" : _linkString];NSURLRequest *request = [NSURLRequest requestWithURL:url];//创建NSURLRequest[_webView loadRequest:request];这样我们就加载了webView原创 2020-06-08 15:15:23 · 2090 阅读 · 0 评论 -
iOS 代码调用打电话
iOS 代码调用打电话很简单,代码如下:url为电话号码,[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:[NSStringstringWithFormat:@"tel://%@",url]]];这样我们便可以进行打电话(当然你的电话和拨打电话必须没有欠费)原创 2016-12-21 13:43:18 · 536 阅读 · 0 评论 -
iOS 如何实现父视图透明度变化,它的子视图不变
实现这个效果很简单,只要一行代码即可:self.backgrund_view.backgroundColor = [[UIColorblackColor] colorWithAlphaComponent:0.3];0.3便士这个父视图self.backgrund_view的透明度,但是它的子视图透明度还不随其变化原创 2016-12-22 09:28:56 · 651 阅读 · 0 评论 -
iOS 最新版本10以后info.plist增加了一些必须要添加的字段,添加完以后才可以通过审核。
麦克风权限:Privacy - Microphone Usage Description 是否允许此App使用你的麦克风?相机权限: Privacy - Camera Usage Description 是否允许此App使用你的相机?相册权限: Privacy - Photo Library Usage Description 是否允许此App访问你的媒体资料库?通讯录权限:原创 2017-03-20 13:48:44 · 1338 阅读 · 0 评论 -
iOS 点击屏幕获取,获取点击位置颜色和对应RGB
有时我们会用到获取点击某一点的颜色或者RGB,就好比,控制灯的颜色,一个颜色板,点击颜色板上的红色,灯就会变红,这个时候我们就会使用到。下面就是实现方法原理,首先获取一张屏幕截图,在获取截图上面的颜色。1 获取屏幕截图,但不是真的会截图,只是生成了一个Image对象/**获取屏幕截图@return 返回屏幕截图*/-(UIImage *)fullScreenshots{ UIWindow ...原创 2018-05-16 11:42:04 · 3228 阅读 · 0 评论 -
iOS :获取沙盒里的图片为空,通过[NSData dataWithContentsOfFile:newstr]和initWithContentsOfFile原因
有时我们会将图片进行存储,储存到沙盒路径下面,等我们用到的时候再去读取。读取的时候一般有两个方法NSData *imageData = [NSData dataWithContentsOfFile:@"路径"];UIImage* image = [[UIImage alloc] initWithData:imageData];还有一个NSString *aPath3=[NSString st...原创 2018-06-01 08:56:59 · 6234 阅读 · 1 评论 -
iOS 判读字符串、数组、字典是否为空
当我们在开发中,我们获取的数据我们在不判断是否为空的时候就直接去赋值或者通过下标去强行获取就会出现程序中最容易出现的闪退问题,这样的例子最常见的就是:字符串、数组和字典了所以为了防止程序出现闪退,我们必须要判断一下他是否为空值,那我们如何去判断呢?有的人可能直接使用字符串穿的长度是否 == 0 来判断,但是这样做太过片面了,如果这个不是个字符串的话怎么会有长度呢,所以这种判断是不对的下...原创 2018-06-16 18:27:03 · 6139 阅读 · 3 评论