iOS 上是否有一种字体带有蓝牙徽标的字形?也许是一些标志,或者表情符号? WiFi标志怎么样?
编辑:有这样一个字符的第三方字体怎么样,我可以许可和发货?
不,蓝牙徽标不是字形或字体字符。
就像 Seva 所说,它是符文 Hagall (ᚼ) 和 Bjarkan (ᛒ) 的组合。我试图通过组合这两个符号来完成同样的事情。
我通过首先找到具有这两个字符的字体来实现这一点。我最终使用了利兹大学。您可以在这里下载:http://www.personal.leeds.ac.uk/~ecl6tam/。
您需要引用info.plist中字体所在的路径。
<key>UIAppFonts</key>
<array>
<string>Fonts/LeedsUni10-12-13.ttf</string>
</array>
然后我创建了两个
UIView
对象(在我的例子中是 UIButton
对象),它们彼此重叠,以便两个角色正确排列。根据您使用的字体,您可能需要调整 UIView 框架的 x 和 y 值。
我的代码是用 C# 编写的,因为我使用的是 Xamarin,但您应该能够在 Objective C 或 Swift 中执行相同的操作。
UIView bleView = new UIView(new CGRect(0, 0, 34.0f, 34.0f));
string fontName = "LeedsUni";
UIButton bluetoothToSerialButton = new UIButton(UIButtonType.RoundedRect);
bluetoothToSerialButton.Frame = new CGRect(0, 0, 34.0f, 34.0f);
bluetoothToSerialButton.SetTitleColor(UIApplication.SharedApplication.Delegate.GetWindow().TintColor, UIControlState.Normal);
bluetoothToSerialButton.SetTitle("ᛒ", UIControlState.Normal);
bluetoothToSerialButton.Font = UIFont.FromName(fontName, 34.0f);
UIButton bluetoothToSerialButton2 = new UIButton(UIButtonType.RoundedRect);
bluetoothToSerialButton2.Frame = new CGRect(-3.5f, 0, 34.0f, 34.0f);
bluetoothToSerialButton2.SetTitleColor(UIApplication.SharedApplication.Delegate.GetWindow().TintColor, UIControlState.Normal);
bluetoothToSerialButton2.SetTitle("ᚼ", UIControlState.Normal);
bluetoothToSerialButton2.Font = UIFont.FromName(fontName, 34.0f);
bleView.AddSubviews(new UIView[] { bluetoothToSerialButton, bluetoothToSerialButton2 });
在 Swift 4.1 中使用 Quartz2D
如果您讨厌使用外部字体或添加一堆 .png 文件,您可能更喜欢一个简单的类来使用 Quartz2D 获得相同的效果。
这对我来说适用于 20x20 点的徽标。 您可能想要优化几何形状或线宽。 另请注意,框架的宽度应等于高度。
请注意,如果尺寸发生变化,您将需要使用 setNeedsDisplay。
import UIKit
class BluetoothLogo: UIView {
var color: UIColor!
convenience init(withColor color: UIColor, andFrame frame: CGRect) {
self.init(frame: frame)
self.backgroundColor = .clear
self.color = color
}
override func draw(_ rect: CGRect) {
let context = UIGraphicsGetCurrentContext()
let h = self.frame.height
let y1 = h * 0.05
let y2 = h * 0.25
context?.move(to: CGPoint(x: y2, y: y2))
context?.addLine(to: CGPoint(x: h - y2, y: h - y2))
context?.addLine(to: CGPoint(x: h/2, y: h - y1))
context?.addLine(to: CGPoint(x: h/2, y: y1))
context?.addLine(to: CGPoint(x: h - y2, y: y2))
context?.addLine(to: CGPoint(x: y2, y: h - y2))
context?.setStrokeColor(color.cgColor)
context?.setLineCap(.round)
context?.setLineWidth(2)
context?.strokePath()
}
}
这些是来自谷歌材料设计的图标,您可以从这里下载它们https://material.io/tools/icons/?icon=bluetooth&style=baseline
没有表情符号,只是在我的 iPad 上查看。
如果您不希望蓝牙徽标可缩放,只需使用 PDF 或 EPS 格式,否则只需使用 png。
转换为 SwiftUI:
struct BluetoothLogo: View {
var color: Color
var size: CGFloat
var body: some View {
Canvas { context, size in
let h = size.height
let y1 = h * 0.05
let y2 = h * 0.25
var path = Path()
path.move(to: CGPoint(x: y2, y: y2))
path.addLine(to: CGPoint(x: h - y2, y: h - y2))
path.addLine(to: CGPoint(x: h / 2, y: h - y1))
path.addLine(to: CGPoint(x: h / 2, y: y1))
path.addLine(to: CGPoint(x: h - y2, y: y2))
path.addLine(to: CGPoint(x: y2, y: h - y2))
context.stroke(
path,
with: .color(color),
lineWidth: 2
)
}
.frame(width: size, height: size)
.background(Color.clear)
}
}
struct BluetoothLogo_Previews: PreviewProvider {
static var previews: some View {
BluetoothLogo(color: .blue, size: 100)
.previewLayout(.sizeThatFits)
.padding()
}
}