Swift 5.1 高帧率朋友圈实现
本篇文章介绍如何基于 IGListKit 框架实现类似朋友圈的高帧率列表,确保在大量图文混排的情况下依然保持流畅滑动。 本文基于IGListKit 4.0实现列表的高帧率滑动效果,项目地址见GitHub 话不多说,上图 创建基类控制器 所有IGListKit的视图控制器都应该继承此类,减少复用 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849class BaseListVC: UIViewController { var objects: [ListDiffable] = [ListDiffable]() lazy var collectionView: UICollectionView = { let flow = UICollectionViewFlowLayout() let collectionView = UICollectionView(frame: CGRect.zero, collectio...
杂记
日常开发中总有一些零散但实用的技巧和命令,不值得单独成篇,却又时常需要翻查。本文就收录了这类碎片知识,包括代码统计、Git 服务器搭建、模拟器运行等。 统计代码量 1234567891011121314find . -name "*.js" -or -name "*.json" -or -name "*.wxml" -or -name "*.wxss" |xargs cat|grep -r -v ^$|wc -lfind . -name "*.swift" -or -name "*.xib" |xargs grep -v "^$"|wc -lfind . -name "*.m" -or -name "*.h" -or -name "*.xib" -or -name "*.c" |xargs wc -lfind . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.h" -or -name "*.rss" ")" -print | xargs wc -l-name "*.m" 就表示扩展名为.m的文件。...
IGListKit使用
IGListKit 是 Instagram 推出的高性能列表框架,本文详细介绍其基类控制器、数据模型和 Cell 绑定的使用方式。 创建基类控制器 所有IGListKit的视图控制器都应该继承此类,减少复用 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748class BaseListVC: UIViewController { var objects: [ListDiffable] = [ListDiffable]() lazy var collectionView: UICollectionView = { let flow = UICollectionViewFlowLayout() let collectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: flow) if #available(iOS 11.0,...
Swift 模型化使用SQLite3
本文介绍如何在 Swift 中通过模型化方式使用 SQLite3 数据库,实现对 SQLite.Swift 库的封装,让数据库操作更加便捷。 在iOS中,使用未经处理的SQLite库是一件很痛苦的事情,所以出现了很多封装后的库,其中在Swift语言中使用的较为广泛的库是SQLite.Swift。使用过的都知道,这个库很好,但是不支持模型化转换就很苦恼,正因为如此,本文所写的也正是对SQLite.Swift的模型化封装 使用 创建的模型实现SQLiteProtocol协议即可 1234import SQLiteManagerclass TestModel: NSObject, SQLiteProtocol {}struct TestModel: SQLiteProtocol {} 创建模型后即可快速开始数据库操作 123456789101112131415161718/// 插入模型(默认不存在会创建SQLiteManager.default.insert(testModel)/// 删除模型SQLiteManager.default.delete(testModel)...
Flutter 笔记
本文汇总了 Flutter 开发中跨平台(iOS/Android)的常见实用技巧,包括插件桥接 OC 库、签名与 ADB 操作、自动方向监听及物理返回按键拦截等,方便快速查阅。 iOS 插件swift 调用oc库 project.podspec文件添加库依赖 s.dependency 'name', 'version' 如需桥接文件 Pods/Development Pods/project/../ios/Classes/目录下创建桥接文件Flutter-Bridging-Header.h,并引用库头文件 在project-umbrella.h文件中添加#import "Flutter-Bridging-Header.h"(也可以全局搜索ProjectPlugin.h后添加在其下)⚠️Podfile必须有use_framework!属性才会生成umbrella文件 如需要添加其他资源文件,需要在project.podspec中配置 12345678search_paths = [ '${SDKROOT}/usr/include/libxml2']s.pod_tar...
nginx 配置
本文汇总了 Nginx 的常用配置,包括 gzip 压缩、缓存策略、反向代理、HTTPS SSL 部署以及常见问题处理方案。 nginx 若修改了nginx的启动目录,则需要修改 user属性 #user nginx; user root; gzip # 开启gzip功能 gzip on; # 启用gzip压缩的最小文件,小于设置值的文件将不会压缩 gzip_min_length 1k; # 缓存空间大小 gzip_buffers 4 16k; # 设置gzip压缩针对的HTTP协议版本 gzip_http_version 1.1; # 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间 gzip_comp_level 4; gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpe...
面试
本文汇总了前端开发岗位面试中的高频知识点,包括 JavaScript 核心机制、Vue.js 框架原理、DOM 操作与跨域处理等内容,帮助求职者系统复习和查漏补缺。 JS 如何理解 JS 中的this关键字? this总是指向函数的直接调用者(而非间接调用者) 如果有new关键字,this指向new出来的那个对象 在事件中,this指向目标元素,特殊的是IE的attachEvent中的this总是指向全局对象window。 什么是window对象? 什么是document对象? window对象代表浏览器中打开的一个窗口。document对象代表整个html文档。实际上,document对象是window对象的一个属性。 [“1”, “2”, “3”].map(parseInt) 答案是多少? [1,NaN,NaN] 数组对象有哪些原生方法,列举一下 pop、push、shift、unshift、splice、reverse、sort、concat、join、slice、toString、indexOf、lastIndexOf、reduce、reduceRight forEa...
Ubuntu安装libssl-dev失败
本文记录了在 Ubuntu 上安装 libssl-dev 时遇到依赖冲突的解决方法,通过使用 aptitude 工具对依赖库进行降级处理,成功安装所需开发库。 安装pyOpenSSL时需要用到本机的libssl-dev库,进一步在Ubuntu上尝试安装库时出错,如下: 1234567891011121314jeromexiong@ubuntu:~$ sudo apt-get install libssl-devReading package lists... DoneBuilding dependency tree Reading state information... DoneSome packages could not be installed. This may mean that you haverequested an impossible situation or if you are using the unstabledistribution that some required packages have not yet been created...
前端性能优化
前端性能优化是提升用户体验的关键环节。本文汇集了Vue首屏加载优化、图片渐进式加载、SSR服务端渲染以及Gzip压缩等多个方向的实用资源与配置示例,供开发者参考使用。 Vue vue首屏性能优化 图片 使用渐进式 JPEG 来提升用户体验 图片懒加载 适用于 vue.js 和原生 js 的渐进式图片懒加载 plugins 深入解析FastClick解决延迟点击 SSR 完全指南 Nuxt开发经验分享 让vue-cli初始化后的项目集成支持SSR 简单的改造SEO(预渲染 ERROR: Failed to download Chromium vue.config.js 123456789101112131415161718192021222324252627// 推荐使用cnpm安装prerenderconst PrerenderSpaPlugin = require("prerender-spa-plugin");const CompressionPlugin = require("compression-webpack-plugin");module.expor...
SOCKET.IO
Socket.IO 是一个基于 WebSocket 的实时通信库,本文整理了服务端与客户端的核心API及常见用法,方便快速查阅和集成到项目中。 服务端 交互 监听客户端连接,回调函数会传递本次连接的socket io.on(‘connection’,function(socket)); 给所有客户端广播消息 io.sockets.emit(‘event’,data); 给指定的客户端发送消息 io.sockets.socket[socketid].emit(‘event’, data); 监听客户端发送的信息 socket.on(‘event’,function(data)); 给当前客户端发送消息 socket.emit(‘event’, data); 给除了自己以外的客户端广播消息 socket.broadcast.emit(“event”,{data:“hello,everyone”}); 给所有客户端广播消息 io.sockets.emit(“event”,{data:“hello,all”}); 分组 12345678910111213141...