自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 资源 (2)
  • 收藏
  • 关注

原创 UI复用封装学习一

enum WHQuizPickItemState { case normal case selected}protocol WHQuizPickItemStyle { var textColor:UIColor {get set} var textFont:UIFont {get set} var backgroundColor:UIColor {get set} var isHidden:Bool {get set}}struct WHQuizP

2022-04-17 21:42:40 499 1

转载 如何清空 React Native 编译时的缓存

在开发 React Native 项目时,修改了部分模块的路径或名称时,出现一些错误,需要清除一些缓存。解决办法:npm start -- --reset-cache如果还是不行,使用下面的方法:watchman watch-del-all && rm -rf $TMPDIR/react-native-packager-cache-* && rm -rf $TMPDIR/metro-bundler-cache-* && npm cache clean

2021-12-24 17:15:47 1400

原创 Vue原理学习

Vue.js的响应式原理概念数据响应式:数据模型仅仅是普通的Javascript对象,而当我们修改数据时,视图会进行更新,避免了繁琐的DOM操作,提高了开发效率。双向绑定当数据发生发生变化,视图会改变;当视图发生改变,数据也随之改变。我们可以使用v-model在表单元素上创建双向数据绑定数据驱动是Vue最独特的特性之一开发过程中仅仅需要关注数据(业务)本身,不需要关心数据是如何渲染视图。数据响应式的核心原理Vue 2.xhttps://cn.vuejs.org/v2/guide/re

2021-12-13 14:20:21 759

原创 24、OC语言的动态性学习(Runtime)

文章目录一、动态类型二、动态绑定三、动态加载四、消息机制的基本原理消息查找阶段动态方法解析消息转发消息快转发消息慢转发消息发送以及转发机制的总结重写respondsToSelector方法代码实现动态解析快速转发慢速转发五、Method Swizzling(动态方法交换)简介使用Method Swizzling需要的几个方法Method Swizzling 使用方法Method Swizzling 简单使用Method Swizzling 方案一Method Swizzling 方案 BMethod Swi

2021-12-13 13:27:56 2731 2

原创 23、RunLoop学习

RunLoop学习RunLoop的本质为什么main函数可以保持一直运行不退出RunLoop数据结构CFRunLoopCFRunLoopModeSource/Timer/OberserverCFRunLoopSourceCFRunLoopTimerCFRunLoopObserver各个数据结构之间的关系RunLoop的ModeRunLoop事件循环的实现机制点击一个app图标打开app到app杀死,经历了哪些过程RunLoop与NSTimer滑动TableView的时候,我们的定时器还会生效吗?RunLoo

2021-12-07 17:02:44 531

原创 22、iOS中的事件传递和视图响应

文章目录触摸事件传递触摸事件的产生触摸事件的传递hitTest方法hitTest的执行过程hitTest伪代码视图响应什么是响应者链条触摸事件响应触摸事件响应基本流程hitTest方法的实际应用扩大点击范围方法一: 重写point(inside:with)方法方法二:重写hitTest方法将触摸事件传递到下面的视图让超出父View的部分仍然可以响应触摸事件不规则图形的点击重写point(inside:with)方法触摸事件传递触摸事件的产生(1)当用户点击屏幕时,会产生一个触摸事件,系统会将该事件加

2021-12-07 11:15:19 2183

原创 Vue打包报错

Syntax Error: Error: Cannot find module 'mozjpeg'主要是image-webpack-loader的一些依赖没有安装成功,使得处理图片报错尝试安装依赖:npm install mozjpeg报错:connect ECONNREFUSED 0.0.0.0:443mozjpeg pre-build test failed可以通过修改hosts解决这个问题。Mac系统修改hostshttps://github.com/googlehosts/h

2021-11-21 18:33:09 2792

转载 vuex页面刷新数据丢失的解决办法

在vue项目中用vuex来做全局的状态管理, 发现当刷新网页后,保存在vuex实例store里的数据会丢失。原因:因为store里的数据是保存在运行内存中的,当页面刷新时,页面会重新加载vue实例,store里面的数据就会被重新赋值初始化解决思路将state的数据保存在localstorage、sessionstorage或cookie中,这样即可保证页面刷新数据不丢失且易于读取。localStorage: localStorage的生命周期是永久的,关闭页面或浏览器之后localStorage

2021-11-21 12:01:43 512

原创 日常遇到的问题

vue add element添加之后选择 按需加载,然后会创建一个plugins文件夹,里面会有一个elemnt.js文件,在这里导入相关的控件。

2021-11-20 14:34:34 3317 1

原创 RxCocoa学习笔记

RxCocoa学习笔记UILabel将数据绑定到 text 属性上(普通文本)将数据绑定到 attributedText 属性上(富文本)UITextField 与 UITextView监听单个 textField 内容的变化(textView 同理)方法一方法二将内容绑定到其他控件上同时监听多个 textField 内容的变化(textView 同理)事件监听UITextView 独有的方法UIButton 与 UIBarButtonItem按钮点击响应按钮标题(title)的绑定按钮富文本标题(attr

2021-11-18 16:37:53 2179

原创 前端编程规范(VSCode + Vue)

第一步:退出 VSCode 应用第二步:输入如下指令,删除 VSCode 的设置和配置sudo rm -rf $HOME/Library/Application\ Support/Code第三步:输入如下指令,删除 VSCode 的插件sudo rm -rf $HOME/.vscode第四步:从 Application 中移除 VSCode...

2021-11-18 10:26:32 2074 1

原创 VUE中body设置高度为100%无效的解决方法

在app.vue中的css中添加html,body,#app{ height: 100%; }

2021-11-17 13:19:43 2143

原创 RxSwift学习笔记

RxSwift专业术语从“以时间为索引的常量队列”开始 - Observable在RxSwift里,这种概念叫做Observable。其中,最上面的一排,就是一个Observable。从左到右,表示时间由远及近的流动过程。上面的每一个形状,就表示在“某个时间点发生的事件”,而最右边的竖线则表示事件成功结束。创建一个事件为了创建一个包含字符1-9的序列,我们可以在Sources/main.swift中添加下面的代码:import RxSwiftObservable.of("1", "2",

2021-11-16 13:17:31 2580

原创 Flutter学习笔记

Flutter学习笔记容器组件ScaffoldScaffoldAppBar抽屉菜单DrawerFloatingActionButtonBottomNavigationBarBottomAppBarCupertinoTabBar页面 body可滚动组件PageView与页面缓存PageView页面缓存Flutter项目架构搭建项目初始化搭建基本UI骨架容器组件ScaffoldScaffold一个完整的路由页可能会包含导航栏、抽屉菜单(Drawer)以及底部 Tab 导航菜单等。Scaffold 是一个

2021-11-15 22:13:58 1046 1

原创 版本号管理

语义化版本号的版本号一般包括四部分:MAJOR、MINOR、PATCH、BUILD。每一部分都由递增的数值组成,例如 1.2.3.4,其中 1 是MAJOR, 2 是 MINOR。如果我们更新 MINOR 版本号,那么下一个版本就是 1.3.0.0。接下来我详细介绍下这四部分。主版本号MAJOR 是指主版本号,通常在重大更新的时候才会需要更新主版本号。例如 iOS 每年都会更新一个主版本号。而对于第三方库来说,主版本号的更新,表示该库的 API 新增了重大功能,或者引入了不可兼容的更新 (breakin

2021-11-14 16:05:10 1522

原创 代码管理学习

代码管理Git分支管理主分支功能分支管理功能分支发布分支GitHub Pull Request 流程GitHub 配置其他总结在软件开发当中,代码管理一直是其中重要的一环,每当软件出现问题,我们就需要查看源码,及时发现其中的漏洞加以修复。并且,由于分工不同,软件开发需要多个人共同完成,如何保证每个人编写的代码符合要求,能够相互配合,也是一个重要的问题。所以,一个非常实用的代码管理工具和一套统一的代码管理流程在开发当中必不可少。Git分支管理不同团队有不同的 Git 分支管理方式,根据我们团队多年的经验

2021-11-14 13:00:28 804

原创 scss学习笔记

Sass的基本特性声明变量$brand-primary : darken(#428bca, 6.5%) !default; // #337ab7$btn-primary-color : #fff !default;$btn-primary-bg : $brand-primary !default;$btn-primary-border : darken($btn-primary-bg, 5%) !default;如果值后面加上!default表示这个是默认值。普通变量与默认变量普通变量

2021-10-31 17:01:25 498

原创 Vuex学习笔记

Vue最核心的两个功能:数据驱动和组件化。每个组件都有自己的状态、视图和行为等部分组成。new Vue({ //state data(){ return { count:0 } }, //view template:` <div>{{count}}</div> `, //actions methods:{ increment(){ this.count++; } }}) 状态管理包括:(1)state,驱动应用的数据源

2021-10-30 09:35:29 299

原创 Dart学习笔记

Dart学习笔记Dart环境搭建Windows 系统安装 DartMac系统安装DartDart开发工具Dart的初次编写Dart基础变量定义变量常量数据类型数值类型布尔类型Set类型RunesSymbols字符串类型基础用法常用属性获取字符串的长度当前字符串是否为空当前字符串是否不为空运行时的数据类型常用方法字符串类型转换 toStringindexOf 字符串查找lastIndexOfcontains 判断字符串中是否包含指定字符startsWith 判断字符串是否以指定字符开头,成立返回 true,不

2021-10-28 13:34:12 520

原创 网页渲染流程

1.1.1.从输入URL到生成DOM树地址栏输入URL,WebKit调用资源加载器加载相应资源;加载器依赖网络模块建立连接,发送请求并接收答复;WebKit接收各种网页或者资源数据,其中某些资源可能同步或异步获取;网页交给HTML解析器转变为词语;解释器根据词语构建节点,形成DOM树;如果节点是JavaScript代码,调用JavaScript引擎解释并执行;JavaScript代码可能会修改DOM树结构;如果节点依赖其他资源,如图片\css、视频等,调用资源加载器加载它们,但这些是异步.

2021-10-27 10:24:29 262

原创 15、OC与Swift的混编

在使用Swift进行iOS开发的过程中,经常涉及到Swift与OC混编的情况,有时主工程是OC的需要另外编入Swift代码,而有时主工程是Swift的需要另外编入OC代码。这其中涉及到修改一下XCode的工程配置。1、在同一个工程中的混编在Swift 5.1中,两种混编的实现步骤:Swift访问OC:只需要在桥接文件(ProductName-Bridging-Header.h)中导入需要暴露给Swift的OC类,即可在Swift中访问相应OC类及方法。OC访问Swift:在OC类中导入Pro

2021-10-24 10:43:04 2883 1

原创 TypeScript学习笔记

TypeScript学习笔记类型系统强类型与弱类型(类型安全)强类型弱类型静态类型与动态类型(类型检查)静态类型动态类型JavaScript类型系统特征Flow使用Flow类型系统强类型与弱类型(类型安全)强类型(1)语法层面限制定义函数的形参类型,和使用函数时传入的实参类型必须一致。(2)强类型语言中不允许有任何的隐式类型转换,如果出现隐式类型转换,编译阶段会报错变量类型允许随时改变的特点,不是强弱类型的差异。弱类型(1)语法层面不会限制参数的类型,机会没有类型约束(2)弱类型语言则允许

2021-10-24 01:47:53 974

原创 14、Swift的自动引用计数

ARCSwift使用自动引用计数(ARC)来跟踪并管理应用使用的内容。当实例不被使用时,ARC会自动释放这些类的实例所占用的内存。引用计数只应用在类的实例。结构体和枚举类型都是值类型,并非引用类型,不是以引用类型的方式来存储和传递的。ARC是如何工作的每次创建一个类的实例,ARC都会分配一个内存块,用来存储这个实例的相关信息。这个内存块保存着实例的类型,以及这个实例相关的属性的值。当实例不在被使用时,ARC会释放这个实例使用的内存空间。但是如果ARC释放了仍在使用的实例,那么你就不能再访问

2021-10-24 01:21:06 2091

原创 JavaScript学习笔记

JavaScript学习笔记定义变量let 与块级作用域块级作用域const命令函数式编程为什么要学习函数式编程函数式编程的概念JS中的函数函数是一等公民高阶函数什么是高阶函数常用高阶函数闭包纯函数纯函数的好处副作用柯里化lodash中的柯里化函数函数的组合箭头函数参数默认值剩余参数展开数组解构数组解构对象的解构赋值字符串的解构模板字符串标签模板字符串的扩展方法includes()startsWith()endsWidth()对象字面量增量ReflectPromise概述Promise对象的状态Promis

2021-10-21 13:02:15 1450 3

原创 CSS常用布局学习

CSS常用布局学习1、水平居中1.1 行内元素/行内块元素水平居中1.2 块级元素水平居中定宽块级元素水平居中不定宽块级元素水平居中方法一:设置table方法二:设置inline-block(多个块级元素)方法三: 设置flex布局(多个块级元素)方法4:position + 负margin;方法5:position + margin:auto;方法6:position + transform;2、垂直居中2.1 单行文本垂直居中2.2 多行文本的垂直居中2.3 块级元素垂直居中定高度垂直居中利用posit

2021-10-16 11:57:58 197

原创 vue+webpack打包发布到线上后微信公众号H5部分打开白屏,刷新又好了

vue+webpack打包发布到线上后微信公众号H5部分打开白屏,刷新又好了1、问题2、原因这次可能的原因3、过渡方案4、解决方案4.1 Vue + Webpack配置js按需加载4.2 配置nginx服务器4.3 前端打包保留两个版本参考文章1、问题前一段时间发布新版本之后,第二天有一些客户反馈:在微信端打开出现白屏现象。经过测试之后发现,刷新一下就OK了。白屏主要集中在发版线上后的一段时间主要以ios居多,安卓偶现,刷新就好了.2、原因微信公众号H5白屏现象很多,一部分是浏览器和app自身的

2021-10-15 16:03:48 3852 1

转载 vue项目首屏加载优化

vue项目首屏加载优化1、存在的问题2、什么是首屏加载2.1 首屏加载时间的计算3、加载慢的原因4、解决的办法4.1 路由懒加载4.1.1 什么是路由懒加载?4.1.2 为什么需要懒加载呢?4.1.3 路由懒加载的原理4.1.4 如何实现路由懒加载?4.2 压缩图片4.3 gzip 压缩4.3.1 服务器压缩文件4.3.2 前端 webpack 打包生成 gz 文件4.4 Webpack打包体积优化4.4.1 splitChunks4.4.2 splitChunks优化5、时间轴回放最近这几个月一直在开发

2021-10-15 11:10:03 5606

转载 21、iOS-Universal Link 接入与微信分享的配置

iOS微信分享接入 Univarsal Link第一步: 在苹果开发者中心配置 Associated Domains第二步: 在 xcode 中启用 Associated Domains第三步: 配置 apple-app-site-association 文件第四步:跳转回 APP 的处理第五步:测试微信分享Xcode配置微信开放平台配置第五步: 在AppDelegate里面向微信注册。其他问题有的手机成功了,有的手机就不行呢?服务器换域名了怎么办?移动端配置好,web端如何配置?备忘录和safari中都

2021-10-13 15:37:05 1683

原创 模块化开发学习笔记

模块化开发模块化开发模块化演化过程阶段一:通过文件划分的方式阶段二 命名空间方式阶段三 IIFE阶段四 利用 IIFE 参数作为依赖声明使用阶段五: 模块化规范的出现CommonJS规范AMD规范模块化标准规范ES Module模块化标准规范ES Module特性ES Module导出ES Module 导入ES Module导入导出的注意事项ES Module 导入导出配合使用ES Module浏览器环境PolyfillES Module in Node.jsWebpack打包模块化开发模块化演化过程

2021-10-11 22:28:01 838

原创 20、UICollectionView的使用

20、UICollectionView的使用UICollectionView的设计理念UICollectionView的工作流程UICollectionViewFlowLayout的用法UICollectionViewFlowLayout常用的属性常用方法preparelayoutAttributesForItemlayoutAttributesForSupplementaryViewcollectionViewContentSizelayoutAttributesForElements自定义FlowLay

2021-10-11 17:45:31 798

原创 19、UICollectionView实现自动换行和自动计算collectionView高度

import Foundation//UICollectionView自动换行/// 对齐方向的枚举,enum AlignDirection: Int { case left = 0, //左对齐 rightFlow, //右对齐 左起显示 rightData, //右对齐 右起显示 center //中间对齐}class CollectionViewAlignFlowLayout: UICollec

2021-10-11 15:10:44 1599

原创 vue中实现锚点定位以及平滑滚动到指定位置

Vue锚点定位传统方式遇到的问题解决办法scrollTop或者scrollIntoView传统方式遇到的问题原生网页做锚点跳转一般使用id和a标签的href实现:<h1 id="title">title</h1><a href="#title">跳转到title</a>在Vue-router中,如果使用的是history模式,当点击超链接时,URL地址会加上#title,导致hash值改变,导致需要多次点击返回才能返回到上一页面。解决办法scr

2021-10-10 12:13:17 18928 5

原创 18、UIStackView横向滚动

1、使用 UIScrollView + UIStackView 的方式2、设置UIStackView的上、左、下、高度,snapKit的 AutoLayout 会自动计算宽度3、在layoutSubviews里要设置scrollow.contentSize,否则不能滑动。import UIKitstruct HorizotalConfigration { var itemWidth:CGFloat = 170 //元素宽度 var itemHeight:CGFloat = 100

2021-10-08 13:50:39 760

原创 在Vue中如何不处理内部元素触发的事件?

在Vue中如何不处理内部元素触发的事件?方法一 事件修饰符.self方法二 事件修饰符.stop方法三 event.target方法一 事件修饰符.self <div class="mask" @click.self="close"> <div class="mask-content"></div> </div>方法二 事件修饰符.stop <div class="mask" @click="close"> &lt

2021-10-07 08:20:27 697

原创 左图右文排列

<div class="list-container"> <div class="photo-container"><img src="" alt="" class="photo" /></div> <div class="info-container"> <p><span class="name">姓名</span> <span class="age">年龄.

2021-10-05 12:59:51 106

原创 css实现横向滚动

<ul class="scroll"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul>auto:只有当内容溢出时,才显示滚动条。scroll:无论是否溢出都显示滚动条。主要为了布局统一,防止滚动条有无导致布局偏差。.scroll { white-space: ...

2021-10-05 12:21:35 4513

原创 CSS多行文本溢出省略显示

CSS多行文本溢出省略显示1、单行文本溢出省略显示2、多行文本溢出省略显示2.1 WebKit内核浏览器解决办法2.2 其他浏览器解决方案2.2.1 定位元素实现多行文本截断1、单行文本溢出省略显示实现单行缩略(部分浏览器需要设置宽度):overflow: hidden;text-overflow: ellipsis;white-space: nowrap;2、多行文本溢出省略显示2.1 WebKit内核浏览器解决办法首先,WebKit内核的浏览器实现起来比较简单,可以通过添加一个-web

2021-10-05 12:00:21 871

原创 Vue Router学习笔记

Vue Router1 前端路由2 路由实现2.1 History 模式2.2 Hash模式2.3 路由的实现原理2.3.1 路由实现步骤2.3.2 Vue Router 实现2.4 SPA(Single Page Application)3 Vue Router的概念3.1 使用步骤3.2 嵌套路由3.2.1 基本使用3.3 定义路由地址3.4 路由命名3. 5 vue-route编程式导航3.5.1 页面导航的两种方式3.5.2 router.push基本用法对象格式的参数3.5.3 router.r

2021-10-02 11:06:51 569

原创 17、UIStackView的用法

17、UIStackView的用法1、基本介绍1.1 什么是StackView1.2 UIStackView的属性Axis: 子视图的布局方向Alignment: 子视图的对齐方式Distribution:子视图的分布比例(大小)Spacing:子试视图间的间距1.3 UIStackView相关方法1、UIStackView的方法1、基本介绍1.1 什么是StackViewUIStackView 是 UIView 的子类,它不能用来呈现自身的内容,而是用来约束子控件的一个控件。UIStackVie

2021-09-29 18:00:03 2965

原创 16、iOS屏幕等比例适配

16、iOS屏幕等比例适配1、基础概念1.1 分辨率相关的概念如果使用物理像素如果使用点1.2 1x、2x、3x的含义2、适配的过程2.1 从UI到开发2.2 适配规则等比缩放变大后的失真的问题适配基础规则文字流式(fluid)控件弹性(flexible)图片等比缩放(scale)举例3、xib等比缩放适配3.1 xib构建的界面约束采用百分比布局布局设置宽度固定宽高比,设定其 Aspect Ratio设置view与父容器边距4、通过代码的方式控制1、基础概念1.1 分辨率相关的概念点(Points

2021-09-29 17:01:09 2224

关于block的循环引用

分析关于block的循环引用 详细了分析在ios开发中常见的错误,值得一看

2016-01-07

NSTimer实现的小计时器

是一个关于NSTimer类的小计时器,主要是为了对比两个类方法创建定时器的区别,以及它们会受到滚动事件的影响,该如何解决这个问题

2015-11-07

空空如也

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

TA关注的人

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