Изменение размера UImage при использовании символов SF - UIImage (systemName :) - PullRequest
0 голосов
/ 29 марта 2020

У меня есть следующий предварительно упакованный системный образ SF:

UIImage(systemName: "location.fill")

Это может показаться тривиальным, но как я могу изменить его размер, чтобы увеличить его? Спасибо.

1 Ответ

0 голосов
/ 29 марта 2020

В приведенном ниже коде предусмотрены два метода:

  1. Предлагаемый способ UIKit (см. developer.apple.com / документация ). Здесь вы рассматриваете изображение символа SF как шрифт и применяете к нему размер точки.

  2. Способ 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")
              }
        }
    
...