我有以下预打包的系统 SF 映像:
UIImage(systemName: "location.fill")
这可能看起来微不足道,但我怎样才能调整它以使其更大?谢谢你。
我有以下预打包的系统 SF 映像:
UIImage(systemName: "location.fill")
这可能看起来微不足道,但我怎样才能调整它以使其更大?谢谢你。
您可以实例化一个UIImage.SymbolConfiguration
. 例如,您可以指定磅值:
let configuration = UIImage.SymbolConfiguration(pointSize: 24)
let image = UIImage(systemName: "location.fill", withConfiguration: configuration)
或者UIFont.TextStyle
:
let configuration = UIImage.SymbolConfiguration(textStyle: .title1)
let image = UIImage(systemName: "location.fill", withConfiguration: configuration)
使用后一种方法,它将尊重设备上的可访问性文本大小设置。
下面的代码提供了两种方法:
UIKit 建议的方式(参见developer.apple.com/documentation)。在这里,您将 SF Symbol 图像视为字体并对其应用磅值。
一种 SwiftUI 方式。按钮(以及示例中的一些相关文本)缩放到提供的框架。
import UIKit
import SwiftUI
class SwiftUIButton : ObservableObject {
@Published var state : Bool = true { didSet { buttonDidChange(state) } }
private lazy var viewController = UIHostingController(rootView: SwiftCustomButton(delegate: self))
var view : UIView { guard let view = viewController.view else {
preconditionFailure("*Fatal Error* Could not create SwiftUI button") }
return view
}
typealias typeForAction = () -> Void
var action : typeForAction?
func buttonDidChange(_ state : Bool) {
guard let action = action else {
return
}
action()
}
}
struct SwiftCustomButton : View {
@ObservedObject var delegate : SwiftUIButton
var body : some View {
VStack() {
Button(action: {
self.delegate.state = !self.delegate.state
}) { Image(systemName: "gear")
.resizable()
.aspectRatio(contentMode: .fit)
}
Text(delegate.state ? "Hello" : "Goodbye")
}
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let button = SwiftUIButton()
button.action = { print("In the ViewController the button has changed to: \(button.state)")}
button.view.frame = CGRect(x: 200, y: 200, width: 80, height: 80)
view.addSubview(button.view)
let image = UIImage(systemName: "gear")
let symbolConfiguration = UIImage.SymbolConfiguration(pointSize: 64.0)
let adjustedImage = image?.applyingSymbolConfiguration(symbolConfiguration)
let uButton = UIButton(type: .custom)
uButton.setImage(adjustedImage , for: .normal)
uButton.frame = CGRect(x: 20, y: 200, width: 80, height: 80)
uButton.target(forAction: #selector(self.buttonAction), withSender: uButton)
view.addSubview(uButton)
self.view = view
}
@objc func buttonAction() {
print("UIButton pressed")
}
}