-
JustTodo开发(五) SwiftUI + web
初版完成以后,发现了一个问题,就是web中的输入框不接受复制/粘贴的快捷键(cmd+c, cmd+v),触发快捷键时,会弹“咚”一声系统音,暂时在AppKit下没能解决这个问题,搜了很多资料,比如这里-Cut/copy/paste keyboard shortcuts not working in NSPopover,想要支持这两个快捷键还是很不容易的,其实包括cmd+x, cmd+a也都不支持,但是我想到之前写的同样是托盘应用Translator,这个就支持这些快捷键,让我突然想到,是不是可以在SwiftUI下,封装一个WKWebView,然后再加载web内容呢? -
JustTodo开发(四) 初版完成
初版已经完成,从切换到SoberJS,基本上只用了一周,便写出来了,如果是使用macOS的原生开发方案,可能现在还困在各种不兼容中。 -
JustTodo开发(三) 更换技术路线,跑步前进
在尝试使用AppKit原生开发界面几天后,我还是放弃了这种尝试了,其羸弱UI表现力,真的是让搭建界面的我心力交瘁。转而,我尝试使用web的形式来开发,即NSPopover中嵌套WKWebView的方式,配合原生层提供一些数据库接口。 -
JustTodo开发(二) 界面初始化
一、界面布局 一个简单的界面布局描述如下: --------------------- | | | | | | | | | | 1 | 2 | | | | | | | | |---------------| | | 3 | --------------------- 简单分为3个区域: 导航 - 用于做Todo Item的分类导航,是一个列表; 内容 - 展示当前分类下的Todo Items; 输入 - 在当前分类下创建新的Todo。 -
JustTodo开发(一) 项目初始化
正如很多开发者一样,进入一个新平台开发连带学习,通常都会开发一个极简的应用,很多人都会开发Todo类应用,这类应用一般来说比较简单容易上手。我也打算开发一个,一来是练手,二来是写一个自己用的极简Todo类应用。 目前市面上的Todo类应用,一般来说,都比较复杂,太多我不需要的功能了,而且还有一些增值付费,对于我来说,根本没有那么多的复杂需求,只需要一个随手打开和关闭的记录而已,放在托盘上就非常的方便。 所以,需求如下: macOS托盘应用,随手打开和关闭; 带有分页标签,以便标记不同类型的todo; 最好有利用iCloud的数据云同步,方便未来与其他平台同步数据; -
MacOS SwiftUI托盘应用开发
最近想利用闲暇时间,做一些托盘工具类app的开发,主要是方便自己在Mac上的部分操作。在遇到各种问题后,总结了一下实现托盘SwiftUI应用的两种方式。 小声吐槽:swiftUI在macOS上的适配真的是很烂,相当多的组件可以说是不完善甚至是不可用的状态,似乎苹果也没有完善的意思,这已经是swift迭代到5.10了啊,竟然还有这么多问题存在。 -
MacOS项目引入c语言源码
在上一篇文章macOS项目中引入c静态库中,为阐述了如何在macOS项目中引入c语言的静态库,但是这样做有一个问题,就是静态库中的代码报错,会无法定义报错的位置,进而不利于排查问题。为了解决这个问题,我修改为源码引入c语言库。 很多教程中都提到,要引入c语言库的源码,需要将源码和头文件都拷贝到macOS项目的目录中,这样做,有一个弊病,就是对于需要引入c语言库的项目,通常都是想底层多平台支持,底层代码就需要独立于任何一个平台代码,如果要拷贝到macOS项目中,那后续修改和维护都会比较麻烦,实际上这是不需要的,接下来就阐述一下我这两天的实践。 -
macOS项目中引入c静态库
最近在写一款多平台的文件传输工具,Android平台已经写的差不多了,现在正在写macOS端,为了多端共享同一套底层协议代码,通讯协议部分,使用了c语言开发,对于Android通过jni调用c的相关代码,我已经驾轻就熟了,但是在macOS项目里,添加静态库并成功调试,我还是有一些懵逼。好在通过ChatGPT的各种帮助,还是跌跌撞撞的调通了。为了防止遗忘,记录一下过程。 -
相机录像新姿势-OpenGL共享上下文+MediaCodec
一、前言 承接上一文章Camera无变形任意尺寸预览,我们已经实现了无形变的任意尺寸的相机画面预览。接下来要完成相机的相关录像、拍照、扫码等功能,最重要也是最难的就是录像部分。 -
Camera无变形任意尺寸预览
在以往做Camera应用开发时,遇到一个问题,就是相机的预览如何做到在任意尺寸完全无变形的画面预览与视频录制。做过相机应用开发的朋友都知道,相机的预览尺寸并不是可以随意设置的,而是需要在支持的预览尺寸中选择一个,你的预览的view大小必须与选择的尺寸相匹配,才能保证画面不变形,但是这在实际开发中是无法应对各种各样的需求的,而且每个手机,支持的预览尺寸并不是完全一致的,而视频的大小往往是需要做到一致的,不然录制出来的视频,在其他手机上播放,就需要做大量的UI适配工作,也没有平台的统一性。