@bm-fe/react-native-ui-components 1.0.1 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/design/build.gradle +51 -0
- package/android/design/consumer-rules.pro +1 -0
- package/android/design/proguard-rules.pro +1 -0
- package/android/design/src/main/AndroidManifest.xml +2 -0
- package/android/design/src/main/java/com/bitmart/react/design/DataUriFetcher.kt +42 -0
- package/android/design/src/main/java/com/bitmart/react/design/DesignComponentPackage.kt +35 -0
- package/android/design/src/main/java/com/bitmart/react/design/PrimaryXLargeViewManager.kt +785 -0
- package/android/design/src/main/java/com/bitmart/react/design/TextButtonViewManager.kt +294 -0
- package/ios/DemoProject/NativeDesign/PrimaryButtonViewManager.m +25 -0
- package/ios/DemoProject/NativeDesign/PrimaryButtonViewManager.swift +321 -0
- package/ios/DemoProject/NativeDesign/TextButtonViewManager.m +21 -0
- package/ios/DemoProject/NativeDesign/TextButtonViewManager.swift +184 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Components/BuyCrypto/Bitmart Card.imageset/Contents.json +21 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Components/BuyCrypto/Bitmart Card.imageset/Property 1=Bitmart Card.svg +3 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Components/BuyCrypto/Contents.json +6 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Components/BuyCrypto/Credit Debit Card.imageset/Contents.json +21 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Components/BuyCrypto/Credit Debit Card.imageset/Property 1=Credit Debit Card.svg +3 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Components/BuyCrypto/Crypto Prepaid Card.imageset/Contents.json +21 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Components/BuyCrypto/Crypto Prepaid Card.imageset/Property 1=Crypto Prepaid Card.svg +3 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Components/BuyCrypto/Mobile Recharge.imageset/Contents.json +21 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Components/BuyCrypto/Mobile Recharge.imageset/Mobile Recharge.svg +3 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Components/BuyCrypto/P2P Trading.imageset/Contents.json +21 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Components/BuyCrypto/P2P Trading.imageset/Property 1=P2P Trading.svg +3 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Components/BuyCrypto/SEPA Deposit.imageset/Contents.json +21 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Components/BuyCrypto/SEPA Deposit.imageset/SEPA Deposit.svg +3 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Components/BuyCrypto/Third-Party Payment.imageset/Contents.json +21 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Components/BuyCrypto/Third-Party Payment.imageset/Property 1=Third-Party Payment.svg +3 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Components/Contents.json +6 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/Contents.json +6 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/checkmark.imageset/Contents.json +21 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/checkmark.imageset/checkmark.pdf +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/close_icon.imageset/Contents.json +22 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/close_icon.imageset/close_icon@2x.png +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/close_icon.imageset/close_icon@3x.png +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/cross.imageset/Contents.json +21 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/cross.imageset/cross.pdf +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/progress.imageset/Contents.json +21 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/progress.imageset/progress.pdf +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/progress_circular.imageset/Contents.json +21 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/progress_circular.imageset/progress_circular.pdf +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/refresh_footer_dark.imageset/Contents.json +22 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/refresh_footer_dark.imageset/refresh_footer_dark@2x.png +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/refresh_footer_dark.imageset/refresh_footer_dark@3x.png +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/refresh_footer_light.imageset/Contents.json +22 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/refresh_footer_light.imageset/refresh_footer_light@2x.png +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/refresh_footer_light.imageset/refresh_footer_light@3x.png +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/search_icon.imageset/Contents.json +21 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/search_icon.imageset/Group 13994.svg +7 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/sheet_dark_chose.imageset/Contents.json +21 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/sheet_dark_chose.imageset/Frame.svg +3 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/sheet_list_arrow.imageset/Contents.json +22 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/sheet_list_arrow.imageset/sheet_list_arrow@2x.png +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/sheet_list_arrow.imageset/sheet_list_arrow@3x.png +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/sheet_list_cell_checkbox.imageset/Contents.json +21 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/sheet_list_cell_checkbox.imageset/Frame (1).svg +3 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/sheet_list_chose.imageset/Contents.json +21 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/sheet_list_chose.imageset/Frame.png +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/slider_bubble.imageset/Contents.json +22 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/slider_bubble.imageset/slider_bubble@2x.png +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/slider_bubble.imageset/slider_bubble@3x.png +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/spot_second_floor_refresh_arrow.imageset/Contents.json +21 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Assets.xcassets/spot_second_floor_refresh_arrow.imageset/spot_second_floor_refresh_arrow.svg +8 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Font/Alexandria-Medium.ttf +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Font/Alexandria-Regular.ttf +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Assets/Font/Alexandria-SemiBold.ttf +0 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Classes/BMFont/BMFont.swift +82 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Classes/BMFont/UIFontExtensions.swift +120 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Classes/Components/AlertView/BMComponentAlertController.swift +574 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Classes/Components/Buttons/BMComponentButton+Examples.swift +77 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Classes/Components/Buttons/BMComponentButton.swift +373 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Classes/Components/Buttons/BMComponentButtonConfiguration.swift +181 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Classes/Components/Popup/BMComponentPopupController.swift +312 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Classes/Components/SegmentView/BMComponentSegmentedTitleCell.swift +294 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Classes/Components/SegmentView/BMComponentSegmentedTitleDataSource.swift +49 -0
- package/ios/Modules/BMUIComponents/BMUIComponents/Classes/Components/SegmentView/BMComponentSegmentedView.swift +292 -0
- package/ios/Modules/BMUIComponents/LICENSE +19 -0
- package/ios/Modules/BMUIComponents/README.md +29 -0
- package/package.json +10 -1
- package/react-native-ui-components.podspec +52 -0
- package/react-native.config.js +16 -0
- package/src/screens/NativeButtonsScreen.tsx +0 -335
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"images" : [
|
|
3
|
+
{
|
|
4
|
+
"idiom" : "universal",
|
|
5
|
+
"scale" : "1x"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"filename" : "sheet_list_arrow@2x.png",
|
|
9
|
+
"idiom" : "universal",
|
|
10
|
+
"scale" : "2x"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"filename" : "sheet_list_arrow@3x.png",
|
|
14
|
+
"idiom" : "universal",
|
|
15
|
+
"scale" : "3x"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"info" : {
|
|
19
|
+
"author" : "xcode",
|
|
20
|
+
"version" : 1
|
|
21
|
+
}
|
|
22
|
+
}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"images" : [
|
|
3
|
+
{
|
|
4
|
+
"filename" : "Frame (1).svg",
|
|
5
|
+
"idiom" : "universal",
|
|
6
|
+
"scale" : "1x"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"idiom" : "universal",
|
|
10
|
+
"scale" : "2x"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"idiom" : "universal",
|
|
14
|
+
"scale" : "3x"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"info" : {
|
|
18
|
+
"author" : "xcode",
|
|
19
|
+
"version" : 1
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M12.0002 1.2C6.1202 1.2 1.2002 6.12 1.2002 12C1.2002 17.88 6.1202 22.8 12.0002 22.8C17.8802 22.8 22.8002 17.88 22.8002 12C22.8002 6.12 17.8802 1.2 12.0002 1.2ZM10.4402 16.2L6.6002 12.36L7.8002 11.16L10.4402 13.8L16.2002 8.04L17.4002 9.24L10.4402 16.2Z" fill="#1C1E1F"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"images" : [
|
|
3
|
+
{
|
|
4
|
+
"idiom" : "universal",
|
|
5
|
+
"scale" : "1x"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"idiom" : "universal",
|
|
9
|
+
"scale" : "2x"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"filename" : "Frame.png",
|
|
13
|
+
"idiom" : "universal",
|
|
14
|
+
"scale" : "3x"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"info" : {
|
|
18
|
+
"author" : "xcode",
|
|
19
|
+
"version" : 1
|
|
20
|
+
}
|
|
21
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"images" : [
|
|
3
|
+
{
|
|
4
|
+
"idiom" : "universal",
|
|
5
|
+
"scale" : "1x"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"filename" : "slider_bubble@2x.png",
|
|
9
|
+
"idiom" : "universal",
|
|
10
|
+
"scale" : "2x"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"filename" : "slider_bubble@3x.png",
|
|
14
|
+
"idiom" : "universal",
|
|
15
|
+
"scale" : "3x"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"info" : {
|
|
19
|
+
"author" : "xcode",
|
|
20
|
+
"version" : 1
|
|
21
|
+
}
|
|
22
|
+
}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"images" : [
|
|
3
|
+
{
|
|
4
|
+
"filename" : "spot_second_floor_refresh_arrow.svg",
|
|
5
|
+
"idiom" : "universal",
|
|
6
|
+
"scale" : "1x"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"idiom" : "universal",
|
|
10
|
+
"scale" : "2x"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"idiom" : "universal",
|
|
14
|
+
"scale" : "3x"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"info" : {
|
|
18
|
+
"author" : "xcode",
|
|
19
|
+
"version" : 1
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<svg width="16" height="21" viewBox="0 0 16 21" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g opacity="0.3">
|
|
3
|
+
<path d="M13.138 11.4713L8.00002 16.6094L2.862 11.4713L3.80471 10.5286L8.00002 14.7239L12.1953 10.5286L13.138 11.4713Z" fill="#0F0F0F"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g opacity="0.3">
|
|
6
|
+
<path d="M13.138 6.47133L8.00002 11.6094L2.862 6.47133L3.80471 5.52863L8.00002 9.72394L12.1953 5.52863L13.138 6.47133Z" fill="#0F0F0F"/>
|
|
7
|
+
</g>
|
|
8
|
+
</svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
|
|
2
|
+
import Foundation
|
|
3
|
+
import BMCore
|
|
4
|
+
|
|
5
|
+
public extension UIFont {
|
|
6
|
+
|
|
7
|
+
/// H1Font - 64pt SemiBold
|
|
8
|
+
static let H1Font: UIFont = UIFont.AlexSemiBold(size: 64)
|
|
9
|
+
|
|
10
|
+
/// H2Font - 40pt SemiBold
|
|
11
|
+
static let H2Font: UIFont = UIFont.AlexSemiBold(size: 40)
|
|
12
|
+
|
|
13
|
+
/// H3Font - 32pt SemiBold
|
|
14
|
+
static let H3Font: UIFont = UIFont.AlexSemiBold(size: 32)
|
|
15
|
+
|
|
16
|
+
/// H4Font - 28pt SemiBold
|
|
17
|
+
static let H4Font: UIFont = UIFont.AlexSemiBold(size: 28)
|
|
18
|
+
|
|
19
|
+
/// H5Font - 24pt SemiBold
|
|
20
|
+
static let H5Font: UIFont = UIFont.AlexSemiBold(size: 24)
|
|
21
|
+
|
|
22
|
+
/// H6Font - 20pt SemiBold
|
|
23
|
+
static let H6Font: UIFont = UIFont.AlexSemiBold(size: 20)
|
|
24
|
+
|
|
25
|
+
/// H7Font - 18pt Medium
|
|
26
|
+
static let H7Font: UIFont = UIFont.AlexMedium(size: 18)
|
|
27
|
+
|
|
28
|
+
/// S1Font - 16pt SemiBold
|
|
29
|
+
static let S1Font: UIFont = UIFont.AlexSemiBold(size: 16)
|
|
30
|
+
|
|
31
|
+
/// S2Font - 16pt Medium
|
|
32
|
+
static let S2Font: UIFont = UIFont.AlexMedium(size: 16)
|
|
33
|
+
|
|
34
|
+
/// S3Font - 14pt SemiBold
|
|
35
|
+
static let S3Font: UIFont = UIFont.AlexSemiBold(size: 14)
|
|
36
|
+
|
|
37
|
+
/// S4Font - 14pt Medium
|
|
38
|
+
static let S4Font: UIFont = UIFont.AlexMedium(size: 14)
|
|
39
|
+
|
|
40
|
+
/// S5Font - 12pt Medium
|
|
41
|
+
static let S5Font: UIFont = UIFont.AlexMedium(size: 12)
|
|
42
|
+
|
|
43
|
+
/// B1Font - 16pt Regular
|
|
44
|
+
static let B1Font: UIFont = UIFont.AlexRegular(size: 16)
|
|
45
|
+
|
|
46
|
+
/// B2Font - 14pt Regular
|
|
47
|
+
static let B2Font: UIFont = UIFont.AlexRegular(size: 14)
|
|
48
|
+
|
|
49
|
+
/// B3Font - 12pt Regular
|
|
50
|
+
static let B3Font: UIFont = UIFont.AlexRegular(size: 12)
|
|
51
|
+
|
|
52
|
+
/// B4Font - 10pt Regular
|
|
53
|
+
static let B4Font: UIFont = UIFont.AlexRegular(size: 10)
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//extension ComponentExtension where Base == UIFont {
|
|
58
|
+
// /// Regular
|
|
59
|
+
// static let b1_400_16: UIFont = UIFont.AlexRegular(size: 16)
|
|
60
|
+
// static let b1_400_14: UIFont = UIFont.AlexRegular(size: 14)
|
|
61
|
+
// static let b1_400_12: UIFont = UIFont.AlexRegular(size: 12)
|
|
62
|
+
// static let b1_400_10: UIFont = UIFont.AlexRegular(size: 10)
|
|
63
|
+
//
|
|
64
|
+
//
|
|
65
|
+
// /// Medium
|
|
66
|
+
// static let s1_500_18: UIFont = UIFont.AlexMedium(size: 18)
|
|
67
|
+
// static let s1_500_16: UIFont = UIFont.AlexMedium(size: 16)
|
|
68
|
+
// static let s1_500_14: UIFont = UIFont.AlexMedium(size: 14)
|
|
69
|
+
// static let s1_500_12: UIFont = UIFont.AlexMedium(size: 12)
|
|
70
|
+
//
|
|
71
|
+
//
|
|
72
|
+
// /// SemiBold
|
|
73
|
+
// static let h1_600_64: UIFont = UIFont.AlexSemiBold(size: 64)
|
|
74
|
+
// static let h2_600_40: UIFont = UIFont.AlexSemiBold(size: 40)
|
|
75
|
+
// static let h3_600_32: UIFont = UIFont.AlexSemiBold(size: 32)
|
|
76
|
+
// static let h4_600_28: UIFont = UIFont.AlexSemiBold(size: 28)
|
|
77
|
+
// static let h5_600_24: UIFont = UIFont.AlexSemiBold(size: 24)
|
|
78
|
+
// static let h6_600_20: UIFont = UIFont.AlexSemiBold(size: 20)
|
|
79
|
+
// static let h7_600_16: UIFont = UIFont.AlexSemiBold(size: 16)
|
|
80
|
+
// static let h7_600_14: UIFont = UIFont.AlexSemiBold(size: 14)
|
|
81
|
+
//}
|
|
82
|
+
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
//
|
|
2
|
+
// UIFontExtensions.swift
|
|
3
|
+
// BMCore
|
|
4
|
+
//
|
|
5
|
+
// Created by james on 2026/3/9.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
|
|
10
|
+
// MARK: 用于在分类中获取Bundle
|
|
11
|
+
fileprivate class BMComponentsBundle { }
|
|
12
|
+
|
|
13
|
+
public enum BMAlexandriaFont: String {
|
|
14
|
+
/// Alexandria font
|
|
15
|
+
case AlexandriaRegular = "Alexandria-Regular"
|
|
16
|
+
case AlexandriaMedium = "Alexandria-Medium"
|
|
17
|
+
case AlexandriaSemiBold = "Alexandria-SemiBold"
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
// MARK: UIFont
|
|
22
|
+
extension UIFont {
|
|
23
|
+
|
|
24
|
+
/// 从 IBMRegular 初始化字体
|
|
25
|
+
/// - Parameter size: 字体大小
|
|
26
|
+
/// - Returns: 字体
|
|
27
|
+
static func AlexRegular(size: CGFloat) -> UIFont {
|
|
28
|
+
// 注册自定义字体,生命周期内,只执行一次
|
|
29
|
+
DispatchQueue.once(token: "bm.font.AlexRegular.token") {
|
|
30
|
+
registerAlexRegularFont()
|
|
31
|
+
}
|
|
32
|
+
return UIFont.font(name: BMAlexandriaFont.AlexandriaRegular.rawValue, size: size)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/// 从 IBMMedium 初始化字体
|
|
36
|
+
/// - Parameter size: 字体大小
|
|
37
|
+
/// - Returns: 字体
|
|
38
|
+
static func AlexMedium(size: CGFloat) -> UIFont {
|
|
39
|
+
// 注册自定义字体,生命周期内,只执行一次
|
|
40
|
+
DispatchQueue.once(token: "bm.font.AlexMedium.token") {
|
|
41
|
+
registerAlexMediumFont()
|
|
42
|
+
}
|
|
43
|
+
return UIFont.font(name: BMAlexandriaFont.AlexandriaMedium.rawValue, size: size)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/// 从 IBMSemiBold 初始化字体
|
|
47
|
+
/// - Parameter size: 字体大小
|
|
48
|
+
/// - Returns: 字体
|
|
49
|
+
static func AlexSemiBold(size: CGFloat) -> UIFont {
|
|
50
|
+
// 注册自定义字体,生命周期内,只执行一次
|
|
51
|
+
DispatchQueue.once(token: "bm.font.AlexSemiBold.token") {
|
|
52
|
+
registerAlexSemiBoldFont()
|
|
53
|
+
}
|
|
54
|
+
return UIFont.font(name: BMAlexandriaFont.AlexandriaSemiBold.rawValue, size: size)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/// 从指定字体类型初始化字体
|
|
58
|
+
/// - Parameters:
|
|
59
|
+
/// - name: 字体名称
|
|
60
|
+
/// - size: 字体大小
|
|
61
|
+
/// - Returns: 字体
|
|
62
|
+
static func font(name: String, size: CGFloat) -> UIFont {
|
|
63
|
+
guard let font = UIFont(name: name, size: size) else {
|
|
64
|
+
return UIFont.systemFont(ofSize: size)
|
|
65
|
+
}
|
|
66
|
+
return font
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// MARK: 注册自定义字体
|
|
71
|
+
extension UIFont {
|
|
72
|
+
|
|
73
|
+
/// 注册 Alexandria-Regular 字体
|
|
74
|
+
private static func registerAlexRegularFont() {
|
|
75
|
+
registerFont(bundleName: "Font", resourceName: "Alexandria-Regular", resourceSuffix: ".ttf")
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/// 注册 Alexandria-Medium 字体
|
|
79
|
+
private static func registerAlexMediumFont() {
|
|
80
|
+
registerFont(bundleName: "Font", resourceName: "Alexandria-Medium", resourceSuffix: ".ttf")
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/// 注册 Alexandria-SemiBold 字体
|
|
84
|
+
private static func registerAlexSemiBoldFont() {
|
|
85
|
+
registerFont(bundleName: "Font", resourceName: "Alexandria-SemiBold", resourceSuffix: ".ttf")
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/// 通过指定的bundle及资源文件注册自定义字体
|
|
89
|
+
/// - Parameters:
|
|
90
|
+
/// - bundleName: 字体资源文件所在的bundle名称
|
|
91
|
+
/// - resourceName: 字体资源文件名称
|
|
92
|
+
/// - resourceSuffix: 字体资源文件后缀
|
|
93
|
+
private static func registerFont(bundleName: String, resourceName: String, resourceSuffix: String) {
|
|
94
|
+
guard let bundle = Bundle.bundle(BMComponentsBundle.self)?.resourcesBundle(with: bundleName) else {
|
|
95
|
+
return
|
|
96
|
+
}
|
|
97
|
+
guard let fontURL = bundle.url(forResource: resourceName, withExtension: resourceSuffix) else {
|
|
98
|
+
return
|
|
99
|
+
}
|
|
100
|
+
UIFont.register(from: fontURL)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/// 通过指定的资源文件URL注册自定义字体
|
|
104
|
+
/// - Parameter url: 资源文件URL
|
|
105
|
+
public static func register(from url: URL) {
|
|
106
|
+
var error: Unmanaged<CFError>?
|
|
107
|
+
let success = CTFontManagerRegisterFontsForURL(url as CFURL, .process, &error)
|
|
108
|
+
if !success {
|
|
109
|
+
if let errorUnwrapped = error?.takeUnretainedValue() {
|
|
110
|
+
let errorDescription = CFErrorCopyDescription(errorUnwrapped)
|
|
111
|
+
debugPrint("Failed to register font: \(errorDescription ?? "unknown error" as CFString)")
|
|
112
|
+
} else {
|
|
113
|
+
debugPrint("Failed to register font")
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
|