一句话使用SF Symbols复制一份,导出为Symbol,导入Xcode Asset即可。

SF Symbols复制一份

Duplicate as Custom Symbol

导出为Symbol

Export Symbol

导入Xcode Asset

这里显示Symbol Image,同样支持symbol样式调整。

Import Xcode Asset

SwiftUI 示例代码

SwiftUI Code

预览:成功🎉

SwiftUI Code

介绍

Relationship-iPhone-preview

Relationship-iPad-preview

逢年过节遇到三姑六婆,拒绝叫不出口的尴尬!轻松搞定亲戚关系~

亲属是基于婚姻、血缘和法律拟制而形成的社会关系。亲属关系包括夫妻、父母、子女、兄弟姊妹、祖父母和外祖父母、孙子女和外孙子女、儿媳和公婆、女婿和岳父母、以及其他三代以内的旁系血亲,如伯、叔、姑、舅、姨、侄子女、甥子女、堂兄弟姊妹、表兄弟姊妹、姨兄弟姊妹等。

​ 亲属称谓指是以本人为中心确定亲族成员和本人关系的名称,是基于血亲姻亲基础上的亲属之间相互称呼的名称、叫法。汉族的家族亲属关系条理分明尊卑有序:比自己长一辈的称呼有姨姑舅叔伯,同辈的有兄弟姊妹、堂表亲等等,下一辈有甥侄等等。中国人由于姻亲而产生的亲戚关系相当庞杂,“祖宗十八代”、“五服”、“六亲”、“九族”让人难以区分,其派生出的各种称谓也是中华文化的一大特征。

​ 如今由于工作生活节奏差异,很多关系稍疏远的亲戚之间来往并不多,年龄差异长幼辈分模糊。春节拜年走亲戚遇到七大姑八大姨,往往会搞不清楚哪位亲戚应该喊什么称呼,很是尴尬。不仅小孩搞不清亲戚关系和亲戚称谓,就连年轻一代的大人也都常常模糊混乱。

​ “亲戚关系计算器”为你避免了叫错、不会叫亲戚的尴尬,收录了中国亲戚关系称呼大全,只需简单的输入即可完成称呼计算。称呼计算器同时兼容了不同地域的方言叫法,你可以称呼父亲为:“老爸”、“爹地”、“老爷子”等等。让您准确的叫出亲戚称谓,理清亲属之间的亲戚关系,轻松掌握中国式的亲戚关系换算,让你更了解中国文化。

支持iOS、iPadOS和macOS。

下载地址:App Store

有任何疑问或者建议,可以通过 Email 联系。

感谢 算法开源

​ 本项目致力于让更多人了解中国传统文化,学习各式各样的中国亲戚称谓。本人深感项目的完善仅凭一己之力是远远不够的,如果你对此感兴趣,欢迎关注本项目 或 提交代码,与我一起完善它,使它被更多人熟知和使用。你也可以通过本项目提供的方法和教程,打造更符合自己使用习惯的亲戚计算器版本。

​ 算法基于「MIT许可协议」开源,除需在源码中保留版权信息和许可声明外,你有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。算法持续更新中,如发现错漏或有想法建议可在此 反馈问题。

隐私政策

本隐私政策描述了我们如何收集,使用和披露与服务有关的个人信息,您通过访问服务即表示同意。“个人信息”是指有关可识别个人的信息,但不包括商业信息。

收集哪些信息

亲戚关系计算器希望使您与我们的体验令人满意且安全。我们的数据收集政策使您可以选择向我们提供多少个人信息,并控制我们如何使用这些信息。我们的目标是为您提供满意的体验,同时让您控制自己的隐私。亲戚关系计算器收集和使用信息主要是为了使您使用我们的服务更轻松,更有意义。如果您选择向我们注册,则可能会在不同时间要求您提供信息,我们将竭尽所能使亲戚关系计算器满足您的服务并只为您提供所需的内容。

收集的信息与用途

匿名信息是指无法与特定个人联系在一起的信息,我们不知道您的姓名,住处或出生日期。匿名信息可能以多种方式收集,包括通过使用 Cookie,网络信标或从您使用的设备中收集。

第三方广告合作伙伴

我们与各种广告商,广告网络,广告服务器和分析公司合作。这些广告商,广告网络,广告服务器和分析公司使用各种技术以及第三方公司的技术来收集数据,以便向您和其他用户发送(或投放)相关广告。这些技术可能包括放置Cookie或网络信标,使用唯一或非唯一的非个人标识符,或在我们的服务上使用其他技术,并且这些技术可用于跟踪用户行为,跟踪我们如何服务正在使用中,有可能为您提供更多相关的广告。这些目标广告可能会出现在我们的服务或您访问的其他服务上。本隐私政策不涵盖广告商,广告网络,广告服务器和分析公司对各种技术的使用。这些公司还可能从您从其他公司使用的服务中获取信息,这些服务包括但不限于其他网站,移动网站,可移动下载的应用程序和可下载的桌面应用程序,并将这些信息与他们通过我们的服务通过这些第三方技术获取的信息结合在一起。您应该意识到,我们无法控制这些第三方技术或其中包含的信息。

更新

亲戚关系计算器可以随时修改本隐私政策。请经常检查是否有任何更改。继续使用服务,即表示您接受本隐私政策的所有更新。此版本于 2023 年 01 月 20 日更新。

联系我们

我们希望此声明能为您提供丰富而清晰的信息。如果您有任何疑问或进一步的信息,请给我们发送电子邮件。

App 与服务反馈: 531sunlight@gmail.com

参考大头蔡Cass的教程【黑苹果】全新的定制USB教程「黑苹果」USB定制补充内容,该选择哪种USB定制方式? 感谢🙏。

Windows下步骤

运行USBToolBox

下载地址:https://github.com/USBToolBox/toolhttps://github.com/USBToolBox/kext

USBToolBox-main

D:插拔USB2和USB3等设备

USBToolBox-Port-Discovery

S:生成UTBMap.kext

修改UTBMap.kext

如果超过15个需要删除多余的,主要这里填写ports的最大值。

UTBMap

生成UTBMap.kext和下载USBToolBox.kext导入EFI,启动macOS

macOS下步骤

Hackintool生成USBPorts.kext

对应HS设置USB2,SS设置USB,导出USBPorts.kext

特别需要主要的是Name中数字后缀,不是portHackintool

USBPorts.kext导入EFI

使用OCAuxiliaryTools,生成的USBPorts.kext导入EFI,并关闭UTBMap.kextUSBToolBox.kext,重启验证。

OCAuxiliaryTools

tvOS上.frame只能修改label,而非button。通过自定义PrimitiveButtonStyle,可以自由修改button。tvOS还需要手动处理@FocusState

下面例子就是写一个固定大小的按钮样式,这样就不会因为文字或者图片大小而产生差异。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import SwiftUI

struct FixedSizeButtonStyle: PrimitiveButtonStyle {
@FocusState private var isFocused: Bool
var size: CGSize
var cornerRadius: CGFloat
func makeBody(configuration: Configuration) -> some View {
configuration.label
.frame(width: size.width, height: size.height)
.foregroundColor(.accentColor)
.background(
RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)
.stroke()
.foregroundStyle(.linearGradient(colors: [.white.opacity(0.5), .clear, .white.opacity(0.5), .clear], startPoint: .topLeading, endPoint: .bottomTrailing))
)
.background(
RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)
.fill((isFocused ? Color.white : Color.gray).opacity(0.5).gradient)
)
.scaleEffect(isFocused ? 1.2 : 1)
.animation(.easeOut(duration: 0.2), value: isFocused)
.focusable()
.focused($isFocused)
.onTapGesture {
configuration.trigger()
}
}
}

extension Button {
func fixedSizeButtonStyle(size: CGSize = CGSize(width: 122, height: 80), cornerRadius: CGFloat = 20) -> some View {
buttonStyle(FixedSizeButtonStyle(size: size, cornerRadius: cornerRadius))
.frame(width: size.width, height: size.height)
}
}

效果图:

iPerfman-tv-screenshot

添加 source/_data/head.njk

1
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/lxgw-wenkai-webfont@1.6.0/style.css" />

修改 _config.next.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
custom_file_path:
head: source/_data/head.njk

font:
enable: true

# Uri of fonts host, e.g. https://fonts.googleapis.com (Default).
host: https://fonts.googleapis.com

# Font options:
# `external: true` will load this font family from `host` above.
# `family: Times New Roman`. Without any quotes.
# `size: x.x`. Use `em` as unit. Default: 1 (16px)

# Global font settings used for all elements inside <body>.
global:
external: false
family: "LXGW WenKai"
size:

# Font settings for site title (.site-title).
title:
external: true
family:
size:

# Font settings for headlines (<h1> to <h6>).
headings:
external: true
family:
size:

# Font settings for posts (.post-body).
posts:
external: true
family:

# Font settings for <code> and code blocks.
codes:
external: false
family: "LXGW WenKai Mono, Source Code Pro"

完成✅

介绍Introducing

iPerfman-iPhone-screenshot

iPerfman-iPad-screenshot

iPerfman-mac-screenshot

iPerfman-tv-screenshot

iPerfman 是一个 iPerf3工具,支持所有苹果平台:iOS、iPadOS、macOS和tvOS。

iPerf 系列工具执行测量 IP 网络上可实现的最大带宽。

具有漂亮速度仪和速度图表。

您可以测试局域网网络速度以找到最佳的WIFI路由器位置。

您可以通过手动设置测试参数来测试更多复杂的网络,例如可以测试 UDP 模式的性能,并使用带宽限制功能来模拟具有带宽限制的网络环境。

iPerfman 支持中文和英文两种语言,您可以在设置中选择您喜欢的语言,便于使用。

总之,iPerfman 是一款强大的网络测速工具,可以帮助您评估网络性能,为您提供更优质的网络体验。

iPerfman is an iPerf3 tool that supports all apple platforms: iOS, iPadOS, macOS, and tvOS.

The iperf series of tools perform active measurements to determine the maximum achievable bandwidth on IP networks.

Beautiful speedometer and speed chart.

You can test the LAN network speed to find the best WIFI router location.

You can test more complex networks by manually setting test parameters, for example to test the performance of UDP mode, and use the bandwidth-limiting functionality to simulate a bandwidth-constrained network environment.

iPerfman supports both Chinese and English, and you can choose your preferred language in the settings for ease of use.

Overall, iPerfman is a powerful network speed measurement tool that helps you evaluate network performance and provides you with a better network experience.

App Store下载
Download on the App Store

有任何疑问或者建议,可以通过 Email 联系。

If you have any questions or suggestions, you can contact them through Email.

隐私政策Privacy policy

本App不进行任何隐私信息收集或上传。

This App does not collect or upload any private information.

UserDefaults 和 AppStorage 混用时,默认值不统一的问题。因为AppStorage持久化时机不确定,UserDefaults先调用时可能获取的值仍是系统默认值。

解决方案有两种:

1. UserDefaults.standard.object(forKey:) == nil 判断。

1
2
3
if UserDefaults.standard.object(forKey: "hasHapticFeedback") == nil {
UserDefaults.standard.set(true, forKey: "hasHapticFeedback")
}

2. 借助SwiftyUserDefaults,但是对于纯SwiftUI项目,没必要。

1
2
3
4
5
extension DefaultsKeys {
var userColorScheme: DefaultsKey<String> { .init("userColorScheme", defaultValue: "default") }
var userThemeName: DefaultsKey<String?> { .init("userThemeName") }
var userLastLoginDate: DefaultsKey<Date?> { .init("userLastLoginDate") }
}

水平布局时,滚动正常,回车键也能正常退出编辑。底层是UITextField
垂直布局时,底层是UITextView,表现不一致,出现问题。

  1. 焦点问题需要我们滚动时,锚点设为顶部,proxy.scrollTo($0, anchor: .top)
  2. 回车键,退出编辑失效的问题,需要借助toolbar

完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import SwiftUI

struct TestNextTextFieldFocus: View {
@State var inputsValues: [String] = (0..<30).map { i in
"test \(i) TextField axis is \(i % 2 == 0 ? ".vertical" : ".horizontal")"
}

@FocusState var focusedInput: Int?

var body: some View {
ScrollViewReader { proxy in
ScrollView {
LazyVStack {
ForEach(0..<inputsValues.count, id: \.self) { i in
TextField("Value", text: $inputsValues[i], axis: i % 2 == 0 ? .vertical : .horizontal)
.focused($focusedInput, equals: i)
.submitLabel(.return)
.id(i)
.onSubmit {
print("submit \(i)")
// update state here !!
if (i + 1) < inputsValues.count {
focusedInput = i + 1
} else {
focusedInput = nil
}
}
}
}
.onChange(of: focusedInput) {
print("onChange focusedInput:\(String(describing: focusedInput))")
// react on state change here !!
proxy.scrollTo($0, anchor: .top)
}
}
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
Spacer()
Button {
focusedInput = nil
} label: {
Text("Done")
}
}
}
}
}
}

struct TestNextTextFieldFocus_Previews: PreviewProvider {
static var previews: some View {
TestNextTextFieldFocus()
}
}

介绍Introducing

Mountpaper-iPhone-screenshot1
Mountpaper-iPad-screenshot1
Mountpaper-mac-screenshot1

裱纸是装裱壁纸的意思。提供许多高质量壁纸。

Mountpaper is meaning of mount wallpaper. Offer a lot of high quality wallpapers.

下载地址 Download on:App Store

有任何疑问或者建议,可以通过 Email 联系。

If you have any questions or suggestions, you can contact them through Email.

隐私政策Privacy policy

本App不进行任何隐私信息收集或上传。

This App does not collect or upload any private information.

SwiftyModel-mac-preview

介绍Introducing

使用 SwiftyJSON 生成在 Swift 语言中支持 SwiftyJSON 的 Model(模型)。

一键复制和分享代码。

Use SwiftyJSON to generate models that support SwiftyJSON in Swift Language.

One-click to copy or share code.

例如输入以下JSON:

For example, enter the following JSON:

1
2
3
4
5
6
7
8
9
10
{
"id" : 1,
"name" : "Jacky",
"notifications" : false,
"pets" : [
"cat",
"dog"
]
}

输出Swift Model:

Output Swift Model:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import Foundation
import SwiftyJSON

struct NewModel {
let id: Int
let name: String
let notifications: Bool
let pets: [String]

init(json: JSON) {
id = json["id"].intValue
name = json["name"].stringValue
notifications = json["notifications"].boolValue
pets = json["pets"].arrayValue.map { $0.stringValue }
}
}

下载地址:App Store

App Store下载
Download on the App Store

有任何疑问或者建议,可以通过 Email 联系。

If you have any questions or suggestions, you can contact them through Email.

隐私政策Privacy policy

本App不进行任何隐私信息收集或上传。

This App does not collect or upload any private information.

0%