- 博客(262)
- 资源 (21)
- 收藏
- 关注
原创 鸿蒙开发之ArkTs开发布局之层叠布局(Stack)和弹性布局(Flex)
层叠布局(StackLayout)用于在屏幕上预留一块区域来显示组件中的元素,提供元素可以重叠的布局。层叠布局通过容器组件实现位置的固定定位与层叠,容器中的子元素(子组件)依次入栈,后一个子元素覆盖前一个子元素,子元素可以叠加,也可以设置位置。层叠布局具有较强的页面层叠、位置定位能力,其使用场景有广告、卡片层叠效果等。Stack组件可以实现容器堆叠,子组件按照顺序依次入栈,后一个子组件覆盖前一个子组件。Stack作为容器,容器内的子元素(子组件)的顺序为Item1->Item2->Item3接口。
2024-04-03 16:59:15
2192
1
原创 鸿蒙开发之ArkTs开发布局之线性布局(Row/Column)
组件按照布局的要求依次排列,构成应用的页面。在声明式UI中,所有的页面都是由自定义组件构成,开发者可以根据自己的需求,选择合适的布局进行页面开发。布局指用特定的组件或者属性来管理用户页面所放置UI组件的大小和位置。
2024-03-29 16:12:13
1868
原创 鸿蒙开发之ArkUI组件常用组件-CustomDialog/Video
使用@CustomDialog装饰器装饰自定义弹窗@CustomDialog装饰器用于装饰自定义弹窗,此装饰器内进行自定义内容build() {Column() {Text("这是弹窗")Text("这是自定义弹窗的内容。。。。")创建构造器,与装饰器呼应相连})点击与onClick事件绑定的组件使弹窗弹出Row() {Button('显示弹窗')})
2024-03-28 18:42:45
1437
原创 鸿蒙开发之ArkUI组件常用组件-Button/Radio/Slider
checked属性可以设置单选框的状态,状态分别为false和true时,设置为true时表示单选框被选中。Button是按钮组件,通常用于响应用户的点击操作,其类型包括胶囊按钮、圆形按钮、普通按钮。该接口用于创建不包含子组件的按钮,其中label用来设置按钮文字,type用于设置Button类型,stateEffect属性设置Button是否开启点击效果。Button有三种可选类型,分别为Capsule(胶囊类型,默认类型)、Circle(圆形按钮)和Normal(普通按钮),通过type进行设置。
2024-03-28 10:43:00
1100
原创 鸿蒙开发之ArkUI组件常用组件文本输入
TextInput、TextArea是输入框组件,通常用于响应用户的输入操作,比如评论区的输入、聊天框的输入、表格的输入等,也可以结合其它组件构建功能页面,例如登录注册页面。TextInput为单行输入框、TextArea为多行输入框。
2024-03-27 21:21:31
1161
原创 鸿蒙开发之ArkUI组件常用组件图片和文本
Text('左对齐')Text('中间对齐')Text('右对齐')TextAlign是枚举,有Start、Center、End。
2024-03-27 12:50:18
1302
原创 鸿蒙开发之了解ArkTS
鸿蒙开发者官网 : https://developer.huawei.com/consumer/cn/开发鸿蒙要用的软件是 DevEco StudioArkTS建立在JS和TS的基础之上,扩展了声明式UI开发范式和状态管理,提供更简洁和自然的开发方式。ArkTS引入了渲染引擎的增强,包括平台无关的自绘制机制、声明式UI后端设计、动态布局等,以提高性能体验。进一步的优化包括代码预编译、高效FFI-Foreign Function Interface、引擎极小化等。ArkTS还构建了跨OS平台的基础设施,以
2024-03-26 19:00:43
1108
原创 nodejs web服务器 之初始化路由
每当一个请求到达服务器之后,需要先经过路由的匹配,只有匹配成功之后,才会调用对应的处理函数。在匹配时,会按照顺序进行匹配,请求类型和请求的URL同时匹配成功,返回对应的数据。在这个文件里我写了一个GET和一个POST,对应的路径分别是/api/user/info 和 /api/user/login。这样就简单的做好了路由的demo,当然在实际的项目中不会这么简单,这里只是做一下模拟,后面会涉及到数据库的增删改查等。2、测试POST,用户登录的接口,在apifox上测试。并返回的对应的数据对象。
2024-03-07 15:52:02
435
原创 nodejs web服务器 -- 搭建开发环境
2、创建一个js文件--- appjs 用来处理请求逻辑, 一个文件夹bin,里面创建一个js文件,我这里命名base.js作为入口。author --- 名字+邮箱 , license --- 授权 , main -- 入口文件。如上图所示,version -- 版本 ,description -- 描述, keywords --- 关键词。其中-y的含义是yes的意思,在init的时候省去了敲回车的步骤,如此就生成了默认的package.json文件。这样,我们就完成了开发环境的搭建。
2024-03-07 12:56:15
643
原创 Nodejs web服务器之GET、POST请求初次体验
运行node,并在浏览器上访问 http://localhost:5005/index.js?注意:有时运行 node index.js 是提示端口5005被占用了。1.DNS解析域名,找到ip地址,建立TCP连接,发起http请求。3.客户端接收到返回的数据,处理数据(比如渲染页面)执行 执行 kill 67740 杀死占用的进程即可。2.服务器接收到http请求,进行处理,返回数据。查看哪些进程占用了5005端口。这样就可以处理客户端的POST请求了。
2024-03-06 18:37:29
556
原创 iOS 使用LFliveKit和IJKPlayer实现直播
手机和mac要连接同一个WiFi,并配置代理,设置ip和端口。或者 系统设置-> 网络 -> wifi -> 详细信息。首先搭建nginx+rtmp本地服务器。这样就简单实现了推流和拉流的功能。终端输入 ifconfig。
2024-03-05 20:05:02
981
原创 在Mac上安装nginx+rtmp 本地服务器
Users/mengxianjin/Downloads/test.mp4 测试视频的绝对路径。rtmp://localhost:1935/rtmplive/test 是VCL上的rtmp地址。listen 监听的端口号, rtmp协议的默认端口号是1935。application 访问的应用路径是 rtmplive。2、重启 nginx, 我当前的版本是 1.25.4。这是在VCL上就可以看到推流的视频了。record off;至此,本地的服务器基本安装完成。nginx 再次开启。
2024-03-05 12:36:26
1313
原创 Masonry 源码简单解析
Masonry是一个轻量级的用于自动布局的框架,是对系统的自动布局约束的一个封装。Masonry让NSLayoutConstraint使用起来更为简洁。Masonry简化了NSLayoutConstraint的使用方式,让我们可以以链式的方式为我们的控件指定约束。上面是Masonry的类图,从类图中我们来整体的分析Masonry框架的结构。然后再由整体到部分逐渐的细化,窥探其内部的实现细节。masonry框架的类结构根据上面的类图,我们分别看一下框架里面各个类。1、UIView的分类 - V.
2021-07-14 17:28:11
457
1
原创 Runloop线程常驻
在iOS开发过程中,有时一些花费时间比较长的操作阻塞主线程,导致界面卡顿,那么我们就会创建一个子线程,然后把这些花费时间比较长的操作放在子线程中来处理。可是当子线程中的任务执行完毕后,子线程就会被销毁掉。如果程序中,需要经常在子线程中执行任务,频繁的创建和销毁线程,会造成资源的浪费。这时候我们就可以使用RunLoop来让该线程长时间存活而不被销毁。来个案例,在睡眠时,通过硬件获取数据信息(比如心电信息),开始睡眠时,创建runloop,使得子线程常驻,用于写数据到文件睡眠结束后,退出runl.
2021-07-14 14:53:49
401
原创 源码分析之AFNetworking④UIkit+AFNetworking
如果需要使用AFNetworking的UIKit扩展时可直接在prefix.pch文件中引入,或者在工程的相关文件中引入。1、AFAutoPurgingImageCache :用于缓存图片的类,通过identifier来添加和搜索UIImage协议中添加图片:- (void)addImage:(UIImage*)image withIdentifier:(NSString *)identifier;协议中删除图片- (BOOL)removeImageWithIdentifier:(NSStri.
2021-07-14 09:33:16
465
1
原创 源码分析之AFNetworking③AFSecurityPolicy和AFURLRequestSerialization
首先看一下AFSecurityPolicy的属性:1、https验证模式,默认无,还有证书匹配和公钥匹配@property (readonly, nonatomic, assign) AFSSLPinningMode SSLPinningMode;typedef NS_ENUM(NSUInteger, AFSSLPinningMode) {AFSSLPinningModeNone,AFSSLPinningModePublicKey,AFSSLPinningModeCertificate,};
2021-07-13 17:29:28
188
原创 源码分析之AFNetworking ②AFNetworkReachabilityManager
AFNetworkReachabilityManager对象用于监听设备当前连接网络的状态。AFNetworkReachabilityManager提供了4种创建方法:(instancetype)sharedManager; //创建单例(instancetype)manager;//创建实例对象(instancetype)managerForDomain:(NSString *)domain;//根据地址名创建实例对象(instancetype)managerForAddress
2021-07-13 17:16:30
310
原创 源码分析之AFNetworking ①AFURLSessionManager与AFHTTPSessionManager
首先查看afn的结构,如下:可以看到AF分为如下5个功能模块: 网络通信模块(最核心)(AFURLSessionManager、AFHTTPSessionManager) 网络状态监听模块(Reachability) 网络通信安全策略模块(Security) 网络通信信息序列化/反序列化模块(Serialization) 对于iOS UIkit库的拓展(UIKit)一、1.网络通信模块-AFURLSessionManager与AFHTTPSes
2021-07-13 16:35:36
840
原创 Flutter开发之网络请求
项目中展示的大部分数据都是来自服务器,我们需要向服务器请求数据,并且对他们进行解析展示。一. 网络请求的方式在Flutter中常见的网络请求方式有三种:HttpClient、http库、dio库。1、HttpClientHttpClient是dart自带的请求类,在io包中,实现了基本的网络请求相关的操作。网络调用通常遵循如下步骤:创建 client.构造 Uri.发起请求, 等待请求,同时您也可以配置请求headers、 body。关闭请求, 等待响应.解码响应的内容..
2021-05-13 17:29:46
862
1
原创 Flutter开发之滚动Widget
移动端数据量比较大时,我们都是通过列表来进行展示的,比如商品数据、聊天列表、通信录、朋友圈等。在Android中,我们可以使用ListView或RecyclerView来实现,在iOS中,我们可以通过UITableView来实现。在Flutter中,我们也有对应的列表Widget,就是ListView。一、ListView1.1、ListView的基本使用ListView可以沿一个方向(垂直或水平方向,默认是垂直方向)来排列其所有子Widget。一种最简单的使用方式是直接将所有需要排列的.
2021-05-11 17:34:39
613
原创 Flutter开发之JSON读取和解析
在开发中,我们经常会使用本地JSON或者从服务器请求数据后回去到JSON,拿到JSON后通常会将JSON转成Model对象来进行后续的操作,因为这样操作更加的方便,也更加的安全。所以学习JSON的相关操作以及读取JSON后如何转成Model对象对于Flutter开发也非常重要。1、 JSON资源配置JSON也属于一种资源,所以在使用之前需要先进行相关的配置。我们在之前使用Image组件时,用到了本地图片,本地图片必须在pubspec.yaml中进行配置:类似的json文件的配置如下:2、.
2021-05-10 17:49:49
3119
1
原创 flutter之布局Widget
为了实现界面内组件的各种排布方式,我们需要进行布局,和其他端不同的是,Flutter中因为万物皆Widget,所以布局也是使用Widget来完成的。Flutter中的布局组件非常多,有31个用于布局的组件。我们没必要一个个全部掌握,掌握最常用的,一些特殊的组件用到时去查文档即可。Flutter将布局组件分成了 单子布局组件(Single-child layout widgets) 和 多子布局组件(Multi-child layout widgets)一. 单子布局组件单子布局组件的含义是其只.
2021-05-08 17:40:03
264
原创 Flutter开发之基础Widget
一、文本Widget在Android中,我们使用TextView,iOS中我们使用UILabel来显示文本;Flutter中,我们使用Text组件控制文本如何展示;1.1普通文本展示在Flutter中,我们可以将文本的控制显示分成两类:控制文本布局的参数: 如文本对齐方式 textAlign、文本排版方向 textDirection,文本显示最大行数 maxLines、文本截断规则 overflow 等等,这些都是构造函数中的参数;控制文本样式的参数: 如字体名称 fontFamily、字体大
2021-05-06 18:06:42
276
原创 Flutter开发之Widget
在 Flutter 中,⼀切的显示都是 Widget 。Widget 是⼀切的基础,作为响应式的渲染,类似 MVVM 的实现机制。我们可以通过修改数据,再⽤ setState 设置数据,Flutter 会⾃动通过绑定的数据更新 Widget 。 所以你需要做的就是实现 Widget 界⾯,并且和数据绑定起来。Widget 分为 有状态 和 ⽆状态 两种,在 Flutter 中每个⻚⾯都是⼀帧,⽆状态就是保持在那⼀帧,⽽有状态的 Widget 当数据更新时,其实是绘制了新的 Widget,只是 State
2021-04-28 17:04:38
252
原创 Flutter开发之Hello World
一、创建项目flutter项目的创建有两种方式:通过命令行创建和开发工具创建。1、命令行创建:flutter create xxx注意:Flutter的名称不要包含特殊的字符,另外不可以使用驼峰标识2、开发工具创建,比如使用Android Studio创建,选择 Start a new Flutter project...
2021-04-28 15:56:18
463
1
原创 Dart的异步
一、Dart的异步模型1.1 Dart是单线程的1.1.1 程序中的耗时操作开发中的耗时操作:在开发中,我们经常会遇到一些耗时的操作需要完成,比如网络请求、文件读取等等;如果我们的主线程一直在等待这些耗时的操作完成,那么就会进程阻塞,无法响应其他事件,比如用户点击事件等如何处理耗时操作?针对如何处理耗时的操作,不同的语言有不同的处理方式。多线程,不如Java、C++,我们普遍的做法是开启一个新的线程,在新的线程中完成这些异步的操作,再通过线程间通信的方式,将拿到的数据传递给主线程。单
2021-04-19 17:24:12
1029
原创 Dart学习之库的使用
在Dart中,我们可以导入一个库来使用它所提供的功能。库的使用可以使代码的重用性得到提高,并且可以更好的组合代码。Dart中任何一个dart文件都是一个库,即使你没有用关键字library声明。1、库的导入import语句用来导入一个库,后面跟一个字符串形式的URI来指定表示要引用的库,语法如下:import "库所在的uri";常见的库URI有三种不同的形式来自dart标准版,比如dart:io、dart:html、dart:math、dart:coreimport 'dart:io
2021-04-19 15:09:54
664
2
原创 Dart学习之泛型
泛型就是解决 类、 接口、 方法的复用性、以及对不特定数据类型的支持Dart中的泛型和其他语言差不多,但是Dart中的类型是可选的,使用泛型可以限定类型;使用泛型可以减少很多模板代码。1、为什么使用泛型?String getData1(String val){ return val; } int getData2(int val){ return val; }上面的两个方法分别返回String类型和int类型,我们可以不指定类型,getData(val){ retu
2021-04-19 10:54:36
467
原创 Dart学习之类和对象
Dart学习之类和对象Dart是一个面向对象的语言,面向对象中非常重要的概念就是类,类产生了对象。1、类的定义在Dart中,定义类用class关键字类通常有两个部分:成员(member)和方法(method)类定义的格式:class 类名{ 类型 成员名称l 返回值类型 方法名(参数){ 方法体 }}这里简单地举个例子,写一个Dog类class Dog{ String name; eat(){ print("$name 在吃东西!!别打扰它,小心咬你") }}
2021-04-19 00:55:52
569
2
原创 Dart学习之运算符和流程控制
Dart学习之运算符和流程控制一、运算符除法、整除、取模运算var num = 7;print(num / 3); // 除法操作, 结果2.3333..print(num ~/ 3); // 整除操作, 结果2;print(num % 3); // 取模操作, 结果1;2 ??= 赋值操作当变量为null时,使用后面的内容进行赋值;当变量有值时,使用自己原来的值。var name = null;name ??= "Tom";//name是null,??= 操作符将Tom赋值给na
2021-04-18 23:13:20
144
原创 Dart学习之基础
Dart学习之基础1、main函数main函数是dart 的入口,dart的入口函数是没有返回值的,传递给main的命令行参数是通过List完成的。字面上可以理解List是dart中集合类型;其中每一个String都表示传递给main的一个参数定义字符串的时候,可以使用单引号或双引号;每行语句必须使用分号结尾,很多语言并不需要分号,比如swift、jsmain(List<String> args) { print('Hello World');}2、定义变量2.1明确声明
2021-04-18 22:49:26
424
原创 iOS MOV转MP4
废话不多说,直接上转换代码+ (NSURL *)jjMovConvert2Mp4:(NSURL *)movUrl{ NSURL *mp4Url = nil; AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:movUrl options:nil]; NSArray *compatiblePresets = [AVAssetExportSession exportPrese
2020-05-25 14:38:54
1107
原创 iOS 使用UIBezierPath实现不等距曲线图
iOS,关于画线有很多很好的第三方,比如Charts、ECharts等等,但是我没有找到画不等距的,就自己简单的实现了一下。首先看,效果就是描点画线加动画,没有太难的。我自定义了一个LineChartView,和几个模型,具体demo下面会给链接给lineChartview暴露出了几个属性和方法,都有注释在controller里面进行初始化配置setChartView方法self.chartView.y_TextFont = [UIFont systemFontOfSize:14];
2020-05-25 13:49:28
292
原创 iOS提升开发效率-常用代码块
Xcode支持自定义代码段,当输入某个关键字就能提示出某个代码段。把常用的代码段保存下来,绝对对开发效率有很大的提高。一、添加代码块:在Xcode中右键,如下图选择‘Create Code Snippet’,即可创建新的代码块,比如我新建了一个定义block的代码块,保存之后,在需要的地方,输入qblo的时候就会有代码块提示,如下图选中回车后,我们需要的代码块就有了二、常用代码块1.strong/** <#描述#> */@prop..
2020-05-09 10:22:09
474
原创 iOS集成OpenCV,并实现图片马赛克
关于Open CVOpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV用C++语言编写,它的主要接口也是C++语言,但是...
2020-02-23 03:21:50
1500
原创 运行react-native报错:xcrun: error: unable to find utility "instruments", not a developer tool or in PATH
在 终端执行如下命令sudo xcode-select -s /Applications/Xcode.app/Contents/Developer/
2019-02-10 23:32:44
780
原创 ffmpeg音视频编解码的封装
//导入头文件//核心库#include "libavcodec/avcodec.h"//封装格式处理库#include "libavformat/avformat.h"//工具库#include "libavutil/imgutils.h"//视频像素数据格式库#include "libswscale/swscale.h"#include "libswresample/swresample.h"...
2018-03-30 00:10:14
2496
1
原创 FFmpeg的基础知识
第一点:一个视频播放流程? 视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,为以下几个步骤:解封装,解码视音频,视音频同步 通常看到视频格式:mp4、mov、flv、wmv等等… 称之为:封装格式 第二点:视频播放器 ...
2018-03-29 22:48:55
1134
原创 ReactiveCocoa的使用
### 1.ReactiveCocoa常见操作方法介绍。* 1.1 ReactiveCocoa操作须知 * 所有的信号(RACSignal)都可以进行操作处理,因为所有操作方法都定义在RACStream.h中,因此只要继承RACStream就有了操作处理方法。* 1.2 ReactiveCocoa操作思想 * 运用的是Hook(钩子)思想,Hook是一种用于改变API(应用程序...
2018-03-28 10:40:24
618
原创 Shell脚本下载和编译ffmpeg
1、首先编写Shell脚本下载ffmpeg,命名为ffmpeg-download.sh:#!/bin/bash#库名称source="ffmpeg-3.4"#下载这个库if [ ! -r $source ]then#没有下载,那么我需要执行下载操作 echo "没有FFmpeg库,我们需要下载….."#下载:怎么下载?#"curl"命令表示:它可以通过Http\ftp等等这...
2018-03-23 00:37:16
1016
iOS 开发Xcode代码块.zip
2020-05-09
微信支付的demo
2016-03-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人