1、前言现在很多应用都有小部件功能,用起来非常方便,在用户安装包含Today小部件的应用后,他们可以将小部件添加到Today视图。当用户在“今日”视图中选择“编辑”时,通知中心会显示一个视图,允许用户添加,重新排序和删除小部件。常见的有支付宝、日历和天气,那么我们也想为自己的应用增加widget功能该怎么办呢,那就继续往下看喽。老版本(iOS9之前)的是直接下拉出现【今天】和【通知】两个选项,iO
有两个方法能解决上述问题,各有有缺,酌情使用方法一导入#include<objc/runtime.h>ClassLSApplicationWorkspace_class=objc_getClass("LSApplicationWorkspace");NSObject*workspace=[LSApplicationWorkspace_classperformSelector:@sele
前方高能预警,本文较长,涉及到的原理性东西较多,建议收藏方便后期查看。我们常常说堆栈堆栈,但是堆和栈其实是完全不同的两个概念。栈其实完全是为了函数调用而设计的,那么函数调用如何通过栈实现的呢?不用函数调用方式,栈在行为上有什么区别呢?笔者曾经去京东面试一个高级开发职位,面试官写了一个从1累加到100的C程序,让笔者写出对应的汇编代码,如果你熟悉栈的原理,其实这个题目就并不难,相反,函数通过栈如何实
查看编译源文件需要的几个不同的阶段:clang-ccc-print-phasesmain.m查看oc的c实现:clang-rewrite-objcmain.m查看操作内部命令:clang-###main.m-omain想看清clang的全部过程,可以先通过-E查看clang在预处理处理这步做了什么:(这个过程的处理包括宏的替换,头文件的导入,以及类似#if的处理)clang-Emain.m预处理完
1.首先react-nativeinit一个初始react-native项目,然后找到ios目录,把ios目录中的项目工程全部删除。(注意事项:在删除之前务必记住这些工程的名字和路径待会第三步需要用到)如下图:1.02.然后把你需要导入的iOS项目copy或者拖到刚刚上一步的ios目录中(如下图1.1),这时打开iOS项目务必运行下,检查下项目是否能编译成功。3.在XCode左侧文件栏中新建一个L
最近在面试的过程中才发现太多没有注意的细节,每一个问题问到最后都是在怀疑人生中度过...正好趁着工作敲定了之后将performSelector相关的细节总结一番。基础用法performSelecor响应了OC语言的动态性:延迟到运行时才绑定方法。当我们在使用以下方法时:[objperformSelector:@selector(play)];[objperformSelector:@selecto
*、assets当引用图片的时候,需要在pubspec.yaml的文件中的flutter下添加assets,类似于下面的样子:这里需要注意的是文件里的assets只要一个缩进即和flutter里的内容保持对齐,否则,会出问题。我遇到的是,没办法选择运行设备。一、Layout原理Flutter布局Layout的核心就是Widget。在Flutter里,基本上任何东西都是Widget,甚至布局的模型。
先上图(做出来的效果就是下图的样子)图中不论每个扇形多小,都可以从指引线处将指引的数据分割开来,不会重叠。第一步需要给图中数据做个模型@interfaceDVFoodPieModel:NSObject/**名称*/@property(copy,nonatomic)NSString*name;/**数值*/@property(assign,nonatomic)CGFloatvalue;/**比例*/
原文链接:https://shinancao.cn/2018/03/18/Project-Design-5/工作中经常会听到这样的声音,“时间赶,先实现了再说,后面找时间再慢慢优化”。扪心自问吧,一个版本开发结束后,除了要改bug,你有多少次回头再去看写过的代码,可能早忘了你要优化什么了。就算你有心要优化,你还要去争取测试资源,如果不是一个部门的就更有难度了。再者,如果实现功能的过程中不注重细节和
WebSocketWebSocket一种在单个TCP连接上进行全双工通讯的协议。传统的网上为了实现推送技术,所用的技术都是轮询。轮询是在特定的时间间隔(如每1秒)由客户端对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端。这种传统的模式带来很明显的缺点,即客户端需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽
为了简化开发流程,提升工作效率,收集了一些平时常用的宏定义,今后会不定期更新1.UI元素//NavBar高度#defineNAVIGATIONBAR_HEIGHT44//StatusBar高度#defineSTATUSBAR_HEIGHT20//获取屏幕宽度、高度#defineSCREEN_WIDTH([UIScreenmainScreen].bounds.size.width)#defineSC
写在前面如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑也可以关注我的JEESNS账户:张芳涛,我后期会发布更多的音视频以及图像处理方面的文章。欢迎亲爱的读者们,欢迎来到这本书,它将使您熟悉FFmpeg项目的许多有趣的特性。下面的几个大公司都是FFmpeg使用者:Facebook,最大的社交网络,用FFmpeg技术处理用户的视频。GoogleChrome,流行的web浏览器,使用FFmpeg
iOS中.a与.framework库的区别参考这篇文章http://www.cocoachina.com/ios/20161012/17730.html从上面我们可以看出.a和.framework的区别就是.a+.h+soureFile=.framework,这样的话,我们还是直接封装个.framework比较好。封装framework步骤1、打开xcode,新建工程这里我使用的是Xcode9,选
最近闲暇时间对iOS内存管理做了一些整理,希望对那些初入iOS领域的读者有一些帮助。希望读者指出文中不妥之处,共同进步,谢谢!众所周知,iOS内存管理是基于引用计数(retainCount)的管理。注:以下引用计数使用RC替代1.创建一个对象并获取它的所有权(通过alloc/new/copy/mutableCopy)  RC=12.retainRC+13.releaseRC-1
效果展示iOS7.0加入了自定义转场动画,淘汰了之前左右两大隐藏护法的抽屉效果,并且一些浮窗、弹层都可以用vc来显示了,不再是用view盖在window上看了一些抽屉Demo发觉都是OC写的,本篇使用Swift4.0编写一个纯正Swift版转场动画管理器,其中用到元组,OC混编可能需要改为字典...自定义转场动画协议1、UINavigationControllerDelegatepush和pop转
级别:★★☆☆☆标签:「UIButton内偏移量」「titleEdgeInsets」「imageEdgeInsets」作者:MrLiuQ我们先看一下苹果官方对UIEdgeInsets说明:typedefstructUIEdgeInsets{CGFloattop,left,bottom,right;//specifyamounttoinset(positive)foreachoftheedges.v
在这边提供一些指纹和面容支付的基本思路,差异以及所遇到的坑。一、支付逻辑基本思路我们重点是考虑如何保证支付的安全,首先肯定不能本地存入用户的支付密码,这样在人行(中国人民银行)来检查的时候是行不通的,而且直接存密码在任何时候都是下下策。我们应该考虑在指纹验证通过后,如何和服务端进行安全交互:1、首先指纹或者面容通过后,我们需要和服务端进行安全环境校验,这个目的是保证当前的环境是安全的。可参考的方式
iOS系统上可以使用UILable、UITextFileld、TextKit显示文本,TextKit也可以做一些布局控制,但如果需要精细的布局控制,或者自线程异步绘制文本,就必须使用CoreText和CoreGraphics,本文比较系统地讲解CoreText排版核心概念。iOS文本系统框架CoreText是iOS系统文本排版核心框架,TextKit和WebKit都是封装在CoreText上的,T
项目中有类似于外卖软件的已点菜品列表,类似于下图:可以看到列表的显示与隐藏,都只能通过按钮触发。不能通过手势驱动。不能设置最小可显示范围。针对以上问题,就有了这个项目。其实以上的需求核心问题就一个,如何优雅的解决:当内容还未到最大可显示范围时,列表里的内容不能滚动;当内容显示到最大的时候,如何不断开当前滚动手势,继续滚动列表里的内容。之前写了一个类似的底部列表滚动视图,地址:https://git
项目中有一个视频自定义区域裁剪的需求,即:用户选取要裁剪的区域去剪辑,区域之外的视频画面会被丢弃。实现效果如下:如图所示,视频页面上是一个拖拽框,添加手势,使之可以自由调节大小,也可以按比例调节大小,按照选取的范围去裁剪视频。好了,UI层面上的东西不再多说。裁剪视频需要用到可能很多开发者都比较陌生的两个类AVMutableVideoCompositionInstruction和AVMutableV