IOS

UILabel显示定时器文本跳动问题的解决方法

2019-07-16
先看一个有问题的展示效果: 上面的gif图会发现在显示验证码计数时出现跳动和闪烁的问题.目前大多数用来实现定时器显示的控件都是UILabel. 在iOS9以前系统默认的英文字体是Helvetica, 这种字体每个数字的宽度都是相等的.而在iOS9以后默认的英文字体变为San Fransico字体,这种字体每个数字的宽度是不相等的. 正是因为数字宽度的不相等就导致了用UILabel来显示定时器文本时出现文字跳动闪烁的问题. 因此解决的方案就是选用一种等宽数字字体显示即可.为此有两个解决方案: 用H

ios设备使用iframe宽度超出屏幕的解决方法

2019-07-13
场景 在做公司官网h5项目时遇到iframe在苹果X手机上右侧超出屏幕的问题,感觉像是被截断一样,但是在其他手机上显示正常. 分析 问题原因:页面a利用iframe嵌入了b,同时设置iframe的宽度为100% ,但是页面b的实际宽度要大于外层设置的100%. 正常情况下,页面b的显示宽度应该为外层赋予的100%,但是在ios上,当iframe内真实宽度大于外层给予的宽度的时候,显示的宽度则为真实宽度. 解决 1.给iframe的外层div添加样式:overflow: auto;-webkit-

iOS中如何获取某个视图的截图详析

2019-07-12
前言 最近在做SDK的截图,想触发类似系统的截屏功能,找了一圈,总结一下靠谱的几种方式. 我写了个UIView 的category,将这几种方式封装和简化了一下. 第一种情形截图 这种是最最普通的截图,针对一般的视图上添加视图的情况,基本都可以使用. 源码: /** 普通的截图 该API仅可以在未使用layer和OpenGL渲染的视图上使用 @return 截取的图片 */ - (UIImage *)nomalSnapshotImage { UIGraphicsBeginImageContext

iOS中如何判断当前网络环境是2G/3G/4G/5G/WiFi

2019-07-10
前言 5G 什么的,还得等苹果API更新啊,不过将来还是这个处理过程就是了. 关于判断当前的网络环境是2G/3G/4G,这个问题以前经常看到,最近在一工程里看到了如果判断的API.而在撸WebRTC音视频通话的时候,看到了Demo中将SCNetworkReachability与其结合,当网络环境改变时,判断当前连接的是什么网络环境,写法欠佳(因为将其与WebRTC的其他逻辑柔和在了一个类).其实只需要将官方的Reachability做一下改进即可. 如何判断当前的网络环境 我们可以利用#impo

iOS导航栏控制的一些总结

2019-07-10
前言 许久不写UI,对UI的很多东西都生疏了,最近使用导航栏的各种场景做一些总结. 1.导航栏的显示与隐藏 导航栏的显示与隐藏,分两种情况: 1.从不显示导航栏的页面push到显示导航栏的页面. 2.从显示导航栏的页面Push到不显示导航栏的页面. 注意: 1.如果导航栏不显示时,系统的侧滑返回功能无效. 2.虽然侧滑返回功能无效,但是导航栏的 .interactivePopGestureRecognizer.delegate还是存在的. 针对以上两种情况分别处理,整个Push过程都假设是从A页

如何利用FutureBuilder提高开发效率

2019-07-08
常见场景 展示请求按钮 用户点击按钮,显示loading 展示数据或者错误 抽象模式 展示请求按钮(初始状态) 用户点击按钮,显示loading(请求中状态) 展示数据或者错误 (结束状态(成功或失败)) 转换成程序语言 以上三种现实情况对应 AsyncSnapshot 三个状态 ConnectionState.none 初始态 ConnectionState.waiting 请求态 ConnectionState.done 完成态 snapshot.hasError 完成(异常) snapsh

iOS开发避免安全隐患的要点总结

2019-07-03
现在很多iOS的APP没有做任何的安全防范措施,导致存在很多安全隐患和事故,今天我们来聊聊iOS开发人员平时怎么做才更安全. 一.网络方面 用抓包工具可以抓取手机通信接口的数据.以Charles为例,用Charles可以获取http的所有明文数据,配置好它的证书后就可以模拟中间人攻击,获取https加密前的明文数据. 1.1 中间人攻击 先简要地说下什么是中间人攻击: ①客户端:"我是客户端,给我你的公钥" -> 服务端(被中间人截获). 所以现在是: 客户端->中间人 ②

iOS开发中多线程的安全隐患总结

2019-07-02
资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题 一.解决方案 解决方案:使用线程同步技术(同步,就是协同步调,按预定的先后次序进行) 常见的线程同步技术是:加锁 1.OSSpinLock OSSpinLock叫做"自旋锁",等待锁的线程会处于忙等(busy-wait)状态,一直占用着CPU资源 目前已经不再安全,可能会出现优先级反转问题 如果等待

iOS开发教程之WKWebView与JS的交互

2019-07-01
前言 iOS8以后,Apple公司推出了WKWebView,对比之前的UIWebView不论是处理速度还是内存性能,都有了大幅度的提升! 那么下面我就分享一下WKWebView与JS的交互. 首先使用WKWebView.你需要导入WebKit #import 然后初始化一个WKWebView,设置代理,并且执行代理的方法.在网页加载成功的时候,我们会调用一些JS代码对网页进行设置. WKWebView的代理一共有三个:WKUIDelegate,WKNavigationDelegate,WKScr

iOS自定义转场动画的几种情况

2019-06-27
前言 在开发中,无论我们使用 Push 还是 Present 推出新的 ViewController 时,系统为了提高用户体验都会为我们默认加上一些过渡动画.但是,系统默认的动画总是不能满足大家各种各样的需求的,所以系统也为我们提供了在不同场景下自定义过渡动画以及通过手势控制过渡进度的实现方案. 这篇文章记录了自定义转场动画中的几种情况: 模态跳转(Present) 导航控制器跳转(Push) UITabbarController 三方框架--Lottie 效果图 预备 首先,我们现在介绍几个在

解决SDK注入权限验证安卓正常,IOS出现config fail的方法

2019-06-23
实测有效 解决微信游览器和企业微信游览器JSSDK注入权限验证 安卓正常,IOS出现config fail 一开始我们想到的是可能微信这边的Bug,但细想一下应该不是.因为可能涉及到了IOS的底层原理的问题,可能是不受微信所控.(有问题欢迎拍砖) 出现问题得解决问题啊,不能把问题晾在那边不管,这是程序员的尊严! 我这个是SPA应用,所以拿其中一个vue项目来做探讨,其他SPA应用同理 首先我们想到在安卓中生效,在IOS中不生效是什么原因? 我们把所有设置都检查了一遍,最终发现是当前路由locat

Objective-C中block循环引用问题详解

2019-06-14
目标:block执行过程中,self不会释放:执行完可以释放. 最初 block中直接使用self会强引用. self.myBlock = ^() { [self doSomething]; }; 或者使用了对象的属性 self.myBlock = ^() { NSString *str = _str; NSString *str2 = self.str; }; 在这样的情况下,self强引用block,block也持有该对象,导致循环引用. 要注意的是,只有在self强引用block的时候才会

iOS中gif图的显示方法示例

2019-06-13
一.前言 iOS开发中,大部分时候我们显示一张静态图就可以了,但是有的时候为了UI表现更生动,我就有可能需要展示gif图来达到效果了. 网上找了一下,显示gif图的框架找到了两个. SDWebImage YYImage 二.显示本地gif图 SDWebImage和YYImage的显示本地图片代码. //load loacle gif image - (void)loadLocaleGifImage{ //sdwebimage [self labelFactoryWithFrame:CGRectM

使用objc runtime实现iOS闭环的懒加载功能

2019-06-13
使用objc runtime实现懒加载 地址:AutoPropertyCocoa 懒加载形式如下 - (id)lazyloadProperty{ if(_lazyloadProperty == nil){ _lazyloadProperty = [XClass ...]; } return _lazyloadProperty; } 一般使用宏定义可以轻松完成.但是没有一致性,移植差. 利用objc runtime的动态性实现懒加载可以实现即可增加又可删除功能,也可以避免污染类型.该三方弥补了目前

iOS去除Webview键盘顶部工具栏的方法

2019-06-04
前言 在默认情况下,iOS 使用 Webview 打开的网页,在进行表单输入时,弹出的键盘顶部会多出一个工具栏. 左边有两个上下按钮,右边有一个Done/完成按钮.这是用来切换输入框的,就像 PC 上按Tab键可以切换输入框一样. 为了让 App 中嵌入的 H5 更接近 Native,咱们可以去掉它. UIWebView UIWebView,可以使用[self hideKeyboardShortcutBar:self.webView]去掉工具栏. - (void) hideKeyboardSho

iOS UIPickerView的简单封装示例

2019-06-01
前言 在iOS实际项目中,经常会出现界面中多个地方需要使用UIPickerView,如果在每个需要用到的地方都创建一个UIPickerView不仅更耗性能,而且还会让你的代码变得更加杂乱.冗余,因此我在这里向大家介绍一下我对UIPickerView的一些简单封装. 所需属性 /** pickerView*/ @property (nonatomic, strong) UIPickerView pickerView; /* pickerView背景*/ @property (nonatomic,

iOS用AutoLayout实现分页滚动功能

2019-05-31
滚动视图分页 UIScrollView的pagingEnabled属性用于控制是否按分页进行滚动.在一些应用中会应用到这一个特性,最典型的就是手机桌面的应用图标列表.这些界面中往往每一页功能都比较独立,系统也提供了UIPageViewController来实现这种分页滚动的功能. 实现分页滚动的UI实现一般是最外层一个UIScrollView.然后UIScrollView里面是一个总体的容器视图containerView.容器视图添加N个页视图,对于水平分页滚动来说容器视图的高度和滚动视图一样,

iOS开发Quick Actions创建桌面Icon快捷方式

2019-05-30
个言 很久没发随笔了,有一年多了吧.期间也曾想继续去写随笔,但是因为各种原因而耽搁了.最近又想了一下,还是有很多东西想要写,想要分享,想要记录下来的东西.之后我也会不断写随笔,但不止于 iOS 的方向,也想去体验一下新东西.在此不多说,我们开始阅读正文吧. 简介 在支持 3D Touch 的设备上,Quick Actions 可以让用户更快,更少的操作步骤去完成他们最常做的事情,其中这么多操作可以通过主屏幕直接完成.比如用力地长按微信图标,会弹出诸如"扫一扫"和"我的二维码&

模仿iOS版微信的滑动View效果

2019-05-27
前言 最近经常交替使用Android和iOS手机.对于两个系统,从我们常用的列表来看,Android一般的列表菜单是通过长按出来的,而iOS是通过滑动出现的.比如我们常用的微信,对于Android版本,长按某个聊天好友,会弹出 标为未读,置顶聊天,删除聊天 选项:对于iOS的版本,右滑,会显示出 标为未读,删除 选项 ---------------------------------我是分割线--------------------------------- 1. 滑动View 1.1 内容展示

iOS bounds学习笔记以及仿写UIScrollView部分功能详解

2019-05-22
经常看到这种说法,frame是基于父控件的,bounds是基于自身坐标的.然而,这个自身坐标是什么?bounds这个属性存在的意义是什么呢?bounds的x和y值真的永远是0吗? 经过查阅资料,我看到这样一种说法:一个控件,拥有其展示部分和内容部分.其展示部分是有限大的,固定坐标固定大小,而其内容部分是无限大的.就像一个电视机以及其播放的电影(这个比喻不太恰当,是我强行比喻的),电视机用于放映电影的屏幕(控件的展示部分)是固定位置固定大小的,然而电影的世界(控件的内容部分)是无限大的,我们只能展