分类 iOS 下的文章

flutter安装
git 下载 flutter:git clone -b stable https://github.com/flutter/flutter.git
配置.zshrc

export PATH=/Users/fanjinlong/dev/flutter/flutter/bin:$PATH
export ANDROID_HOME=/Users/fanjinlong/Library/Android/sdk
export PATH=${PATH}:${ANDROID_HOME}/tools
export PATH=${PATH}:${ANDROID_HOME}/platform-tools
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
# 记得配置完了,执行下 source ~/.zshrc 更新环境变量

命令行执行 flutter doctor 检查环境配置情况。
在 Android studio 中添加插件 flutter + dart
根据flutter doctor 解决所有必要的问题
运行 flutter run
如果不能运行,查看报错,比如 flutter emulators——>flutter emulators --launch Pixel_2_API_29——> flutter run

Running "flutter pub get" in flutter_app...                         3.4s
Using hardware rendering with device Android SDK built for x86. If you get graphics artifacts, consider
enabling software rendering with "--enable-software-rendering".
Launching lib/main.dart on Android SDK built for x86 in debug mode...
Initializing gradle...
540.5s (!)
Resolving dependencies...
634.0s (!)
Running Gradle task 'assembleDebug'...
Running Gradle task 'assembleDebug'... Done                       147.6s (!)
Built build/app/outputs/apk/debug/app-debug.apk.
Installing build/app/outputs/apk/app.apk...                         2.9s
D/EGL_emulation( 4282): eglMakeCurrent: 0xd681a0c0: ver 3 0 (tinfo 0xd680f300)
D/eglCodecCommon( 4282): setVertexArrayObject: set vao to 0 (0) 1 0
Syncing files to device Android SDK built for x86...
I/OpenGLRenderer( 4282): Davey! duration=788ms; Flags=1, IntendedVsync=1386986507632, Vsync=1386986507632, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=1386993436664, AnimationStart=1386993471165, PerformTraversalsStart=1386993474034, DrawStart=1387600641641, SyncQueued=1387601916409, SyncStart=1387607434150, IssueDrawCommandsStart=1387609441987, SwapBuffers=1387725240730, FrameCompleted=1387780735364, DequeueBufferDuration=31361000, QueueBufferDuration=260000,
I/Choreographer( 4282): Skipped 46 frames!  The application may be doing too much work on its main thread.     D/EGL_emulation( 4282): eglMakeCurrent: 0xd681a300: ver 3 0 (tinfo 0xd680f3d0)                                 D/eglCodecCommon( 4282): setVertexArrayObject: set vao to 0 (0) 1 0                                            Syncing files to device Android SDK built for x86...            183,943ms (!)
?  To hot reload changes while running, press "r". To hot restart (and rebuild state), press "R".
An Observatory debugger and profiler on Android SDK built for x86 is available at:
http://127.0.0.1:52933/6NColDWV2ps=/
For a more detailed help message, press "h". To detach, press "d"; to quit, press "q".
Initializing hot reload...
Reloaded 0 of 455 libraries in 956ms.
To run an emulator, run 'flutter emulators --launch <emulator id>'.
To create a new emulator, run 'flutter emulators --create [--name xyz]'

[TOC]

什么是swiftUI?

Apple的解释:

更好的应用。更少的代码。

SwiftUI是一种创新的,非常简单的方法,可以通过Swift的强大功能在所有Apple平台上构建用户界面。仅使用一组工具和API为任何Apple设备构建用户界面。SwiftUI具有易于阅读和自然编写的声明式Swift语法,可与新的Xcode设计工具无缝协作,使您的代码和设计完美同步。自动支持动态类型,暗模式,本地化和可访问性意味着您的第一行SwiftUI代码已经是您编写过的最强大的UI代码。

声明性语法

SwiftUI使用声明性语法,因此您可以简单地说明您的用户界面应该做什么。例如,您可以编写需要包含文本字段的项目列表,然后描述每个字段的对齐方式,字体和颜色。您的代码比以前更简单,更易于阅读,从而节省您的时间和维护。

import SwiftUI
struct Content : View {
  @State var model = Themes.ListModel
  var body: some View {
    List(model.items,action: model.selectItem){ item in
      Image(item.image)
      VStack(alignment: .leading){
        Text(item.title)
        Text(item.subtitle)
            .color(.gray)
      }
    }
  }
}

这种声明式风格甚至适用于复杂的概念,如动画。轻松地将动画添加到几乎任何控件中,并选择只有几行代码的即用型效果集合。在运行时,系统会处理创建平滑移动所需的所有步骤,甚至可以处理中断以保持应用稳定。通过动画这么简单,您将寻找新的方法来让您的应用程序活跃起来。

设计工具

Xcode 11包含直观的新设计工具,使得使用SwiftUI构建界面就像拖放一样简单。当您在设计画布中工作时,您编辑的所有内容都与相邻编辑器中的代码完全同步。在您键入时,代码会立即显示为预览,您对该预览所做的任何更改都会立即显示在您的代码中。Xcode会立即重新编译您的更改,并将其插入到应用程序的运行版本中,始终可见且可编辑。
拖放。只需拖动画布上的控件即可在用户界面中排列组件。单击以打开检查器以选择字体,颜色,对齐方式和其他设计选项,并使用光标轻松重新排列控件。许多这些可视化编辑器也可以在代码编辑器中使用,因此您可以使用检查器为每个控件发现新的修改器,即使您更喜欢手动编码界面部分。您还可以从库中拖动控件并将其拖放到设计画布上或直接放在代码上。
动态更换。Swift编译器和运行时完全嵌入到Xcode中,因此您的应用程序将不断构建和运行。您看到的设计画布不仅仅是您的用户界面的近似 - 它是您的实时应用程序。Xcode可以直接在您的实时应用程序中使用“动态替换”交换已编辑的代码,这是Swift中的一项新功能。
预览。您现在可以创建任何SwiftUI视图的一个或多个预览以获取示例数据,并配置用户可能看到的几乎任何内容,例如大字体,本地化或暗模式。预览还可以在任何设备和任何方向上显示您的UI。

所有Apple平台都是原生的

SwiftUI建立在数十年创建世界上最具创新性和直观的用户界面的经验之上。用户喜欢Apple生态系统的所有内容,例如控件和特定于平台的体验,都会在您的代码中呈现出来。SwiftUI是真正的原生,因此您的应用程序可以通过少量代码和交互式设计画布直接访问每个平台的成熟技术。

对开发者和公司的影响

通过swiftUI的发布可以看到,Apple 在逐步拜托对 Objective-C & Cocoa 的依赖,将精力和资源倾斜到swift语言上,这一次是对UIKit的摆脱。以 Apple 一贯的强势政策,很有可能后期会逐步放弃对 Objective-C 的持续优化(事实上有证据表明已经开始了)和App Store 上的政策制裁。以到达逐步引导开发者加入到新的平台上,这是在之前有过先例的:比如Mac OS从 power-pc 架构转到 x86架构.这将会是一个逐步渐进的过程,但是不会太长最多一两年,并且改变不可逆。
对于公司和开发者来说,最好的莫过于全面拥抱 swift,但是考虑到很多旧项目使用 OC ,已经形成了强大的路径依赖,越大的项目组转身会越困难。但是大项目组人力不缺,资源不缺,有强大的容错能力,我认为反而是大项目组会最早探索,转身稳中有快。而对于新项目和创业公司来说则没有任何技术债务,技术选型会更轻松一些,完全受开发人员的控制。而最尴尬的莫过于中型项目和团队。人手紧缺,业务变动剧烈,最关键的是技术leader如果没有技术前瞻性的话,担心在技术转型中影响业务发展,反而是最保守的。处在这个位置的开发人员是最痛苦的。
解决办法就是:开发自己的项目,拥有完全独立自主的决定权。代价就是每年$99≈¥688。
公司的解决方案就是:在新的项目中使用swift。不建议使用混合开发,编译速度慢,有想想不到的问题

版本要求

SwiftUI 支持的设备要求版本较高,将在7月份开启公测,官方介绍如下:
只支持
Xcode 11+ Bata
iOS 13.0+ Beta
macOS 10.15+ Beta
UIKit for Mac 13.0+ Beta
tvOS 13.0+ Beta
watchOS 6.0+ Beta

在 2011 年 WWDC(苹果全球开发者大会)的一场与 Objective-C 相关的讲座上,开发者的人生观被颠覆了。
作为一个开发者,管理好自己程序所使用的内存是天经地义的事,好比人们在溜狗时必须清理狗的排泄物一样(美国随处可见“Clean up after your dogs”的标志)。在本科阶段上 C 语言的课程时,教授们会向学生反复强调:如果使用 malloc 函数申请了一块内存,使用完后必须再使用 free 函数把申请的内存还给系统——如果不还,会造成“内存泄漏”的结果。这对于 Hello World 可能还不算严重,但对于庞大的程序或是长时间运行的服务器程序,泄内存是致命的。如果没记住,自己还清理了两次,造成的结果则严重得多——直接导致程序崩溃。
Objective-C 有类似 malloc/free 的对子,叫 alloc/dealloc,这种原始的方式如同管理C内存一样困难。所以 Objective-C 中的内存管理又增加了“引用计数”的方法,也就是如果一个物件被别的物件引用一次,则引用计数加一;如果不再被该物件引用,则引用计数减一;当引用计数减至零时,则系统自动清掉该物件所占的内存。具体来说,如果我们有一个字符串,当建立时,需要使用 alloc 方法来申请内存,引用计数则变成了一;然后被其他物件引用时,需要用 retain 方法去增加它的引用计数,变成二。当它和刚才引用的物件脱离关联时,需使 release 方法减少引用计数,又变回了一;最后,使用完这个字符串时,再用 release 方法减少其引用计数,这时,运行库发现其引用计数变为零了,则回收走它的内存。这是手动的方式。
这种方式自然很麻烦,所以又设计出一种叫做 autorelease 的机制(不是类似 Java 的自动垃圾回收)。在 Objective-C 中,设计了一个叫做 NSAutoReleasePool 的池,当开发者需要完成一个任务时(比如每开启一个线程,或者开始一个函数),可以手动创立一个这样的池子, 然后通过显式声明把物件扔进自动回收池中。NSAutoReleasePool 内有一个数组来保存声明为 autorelease 的所有对象。如果一个对象声明为 autorelease,则会自动加到池子里。如果完成了一个任务(结束线程了,或者退出那个函数),则开发者需对这个池子发送一个 drain 消息。这时,NSAutoReleasePool 会对池子中所有的物件发送 release 消息,把它们的引用计数都减一 ——这就好比游泳池关门时通知所有客人都“滚蛋”一样。所以开发者无需显式声明 release,所有的物件也会在池子清空时自动呼叫 release 函数,如果引用计数变成零了,系统才回收那块内存。所以这是个半自动、半手动的方式。
---《Mac OS X 背后的故事》

三种握姿

趴式握鼠 =掌握
姿势特点:手掌掌心全部与鼠标背部贴合,大拇指、无名指与小拇指自然伸直共同操作鼠标。食中二指自然平放在鼠标按键上。点击按键时,指腹与按键接触。移动时,手腕随鼠标移动。此姿势由于鼠标活动范围大,手常自然放在鼠标上不易疲劳,适合于低SENS的FPS玩家长时间练习。
趴式握鼠依靠手腕做支点,整个手自然落在鼠标上,如果在右手型鼠标上第一感觉就是舒适,这也是大部分人采用的握姿。手部疲劳度低,依靠手腕运动,所以长时间操作及右手型鼠标用户推荐此种握法。

- 阅读剩余部分 -

免费字体

  1. 宋体、黑体、仿宋、隶属、楷体、幼圆 这些属于通用字体,没有著作权,是可以用来商用的。
  2. 思源字体 是adobe和Google合作开发的开源字体可以免费商用
  3. 站酷字体 不是所有站酷开头的都是免费的哦注意。这几款才是免费的,站酷酷黑体、站酷意大利体、站酷快乐体、站酷高端黑体
  4. 庞门正道标题体
  5. 濑户字体
  6. 手书体中文简体
  7. 苹方 苹果公司出的字体,iOS系统默认字体
  8. 汉仪也出了一款免费商用的字体贤二体
  9. MacOS自带字体全部可以免费商用,github有开源的字体库可以免费商用
  10. 华康有十几款免费商用的……平时我用的最多的大概是华康圆?因为有五种还是四种粗细不一样的。老好用了。
  11. 淘宝买了版权的,可以用华康的字。在其他地方用还是要小心点
注意:

1. 辣鸡方正也有一款幼圆字体 小心被告 而且方正的字体很多都故意不带前缀 等你们用了 就去告
2. 字体版权会不断变更,多了解这方面的情况为好
3. 微软雅黑字体不是微软家的,是方正的,不能免费商用。极具迷惑性的名字坑了很多人。
4. 在淘宝购买字体需要版权方认可