it-swarm.com.de

iOS Swift Hinzufügen von SVG-Bildern zu Schaltflächen wie Android

In Android können wir SVG als Vector XML importieren, als Drawable verwenden, die Farben von SVG Icons ändern und zur Schaltfläche hinzufügen

void setSvgIcnForBtnFnc(Button setBtnVar, int setSvgVar, int setClrVar, String PosVar)
{
    Drawable DevDmjVar = getDrawable(setSvgVar);
    DevDmjVar.setBounds(0,0,Dpx24,Dpx24);
    DevDmjVar.setColorFilter(new PorterDuffColorFilter(setClrVar, PorterDuff.Mode.SRC_IN));
    switch (PosVar)
    {
        case "Tit" : setBtnVar.setCompoundDrawables(null, DevDmjVar, null, null); break;
        case "Rit" : setBtnVar.setCompoundDrawables(null, null, DevDmjVar, null); break;
        case "Pit" : setBtnVar.setCompoundDrawables(null, null, null, DevDmjVar); break;
        default: setBtnVar.setCompoundDrawables(DevDmjVar, null, null, null); break;
    }
}

Wie mache ich das in Swift für iPhones?

setBtnVar.setImage(<image: UIImage?>, forState: <UIControlState>)
4
Sujay U N

UPD: Siehe auch diesen UseYourLoaf Blog Post

Gerade gefunden auf Erica Sadun Blog Post dass auf iOS 11 Sie Vector Assets verwenden könnten .

Was "Vektor-Assets" bedeuten:

Wenn Sie auf dieses Kästchen klicken, werden die Vektordaten mit Ihrer Anwendung geliefert. Dies vergrößert einerseits Ihre Anwendung ein wenig, da die Vektordaten etwas Platz beanspruchen. Auf der anderen Seite haben Sie jedoch die Möglichkeit, diese Bilder zu skalieren, was in verschiedenen Situationen hilfreich sein kann. Zum einen, wenn Sie wissen, dass dieses bestimmte Bild in mehreren Größen verwendet wird. Aber das könnte weniger offensichtlich sein. Ein Fall ist also eine symbolische Glyphe, deren Größe mit dem dynamischen Typ geändert werden sollte. Da wir über dynamischen Typ nachdenken, sollten Sie auch darüber nachdenken, Glyphen, die neben dem Typ erscheinen, die Größe entsprechend ändern zu lassen. Ein anderer Fall, der wirklich nicht offensichtlich ist, sind Registerleistenbilder. ... es gibt eine wirklich großartige Eingabehilfe, die wir nachdrücklich empfehlen, um Benutzern die Möglichkeit zu geben, ihre dynamische Schriftgröße zu erhöhen. ... Wir empfehlen daher dringend, dies zu tun, um die Benutzerfreundlichkeit Ihrer App für alle Benutzer zu verbessern

Wie benutzt man:

  1. Konvertieren Sie Ihre SVG-Datei in PDF, z. auf ZamZar.com
  2. Fügen Sie Ihr PDF zu Assets.xcassets hinzu
    • Klicken Sie für das importierte PDF auf "Vektordaten beibehalten".
  3. Erstellen Sie UIImageView in Ihrer UIViewController und weisen Sie eine PDF-Datei wie UIImage zu.

iOS <11

Es gibt keine native Möglichkeit, SVG-Bilder zu verwenden.

Schauen Sie sich Ara

Framework importieren über Cocoapod

pod "Macaw", "0.8.2"

Überprüfen Sie ihr Beispielprojekt : So rendern Sie tiger.svg (im Projektverzeichnis, nicht in einer Assets.xcassets-Datei)

import UIKit
import Macaw

class SVGExampleView: MacawView {

    required init?(coder aDecoder: NSCoder) {
        super.init(node: SVGParser.parse(path: "tiger"), coder: aDecoder)
    }

}

Es gibt natürlich auch einige andere Bibliotheken von Drittanbietern:

7
Aleksey Potapov

Sie können vektorbasierte PDF-Dateien nativ verwenden, wenn Sie nach dem Import Einzelne Skalierung für Skalierungsfaktoren auswählen.

Die Dimensionen des PDF sind die 1x Dimensionen für das Asset.

Xcode generiert das gerasterte Bild für jeden Maßstab. Sie können es dann wie jedes andere Bild verwenden.

1
Tamás Sengel

Schauen Sie sich meine App an: Speculid Sie konvertiert automatisch SVGs in PDFs oder PNGs, je nachdem, wie Ihre Asset-Bibliothek eingerichtet ist.

0
leogdion

Ich habe Aleksey Potapovs Antwort verwendet. Der Umbau und alles ist perfekt! Ich hatte jedoch ein Problem, bei dem mein Bild für meine Anwendung zu groß war.

Verwenden Sie diese Option, um die Größe für die iOS-Entwicklung anzupassen:

<svg xmlns="http://www.w3.org/2000/svg" height="30" width="30" viewBox="0 0 1000 1000" xmlns:xlink="http://www.w3.org/1999/xlink">
0
Captain Sponge

Nach einem Albtraum kam ich auf diese Lösung für die Verwendung von SVG in Button mit Swift. Dies ist für alle, die nicht wie ich kämpfen möchten

Ich habe die einfache SwiftSVG - Bibliothek verwendet, um UIView aus der SVG-Datei abzurufen

Verwendungszweck :

namBtnVar.setSvgImgFnc("ikn_sev", ClrVar: UIColor.cyanColor())

Installieren Sie SwiftSVG Library

1) Verwenden Sie den Pod, um Folgendes zu installieren:

// Für Swift 3

pod 'SwiftSVG'

// Für Swift 2.3

pod 'SwiftSVG', '1.1.5'

2) Framework hinzufügen

Gehe zu AppSettings
-> Registerkarte Allgemein
-> Scrollen Sie nach unten zu Linked Frameworks and Libraries
-> Klicken Sie auf das Plus-Symbol
-> Wählen Sie SVG.framework

3) Fügen Sie den folgenden Code an einer beliebigen Stelle in Ihrem Projekt hinzu

extension UIButton
{
    func setSvgImgFnc(svgImjFileNameVar: String, ClrVar: UIColor)
    {
        setImage((getSvgImgFnc(svgImjFileNameVar, ClrVar : ClrVar)), forState: .Normal)
    }
}

func getSvgImgFnc(svgImjFileNameVar: String, ClrVar: UIColor) -> UIImage
{
    let svgURL = NSBundle.mainBundle().URLForResource(svgImjFileNameVar, withExtension: "svg")
    let svgVyuVar = UIView(SVGURL: svgURL!)

    /* The width, height and viewPort are set to 100 

        <svg xmlns="http://www.w3.org/2000/svg"
            width="100%" height="100%"
            viewBox="0 0 100 100">

        So we need to set UIView Rect also same
    */

    svgVyuVar.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
    for svgVyuLyrIdx in svgVyuVar.layer.sublayers!
    {
        for subSvgVyuLyrIdx in svgVyuLyrIdx.sublayers!
        {
            if(subSvgVyuLyrIdx.isKindOfClass(CAShapeLayer))
            {
                let SvgShpLyrIdx = subSvgVyuLyrIdx as? CAShapeLayer
                SvgShpLyrIdx!.fillColor = ClrVar.CGColor
            }
        }
    }
    return svgVyuVar.getImgFromVyuFnc()
}

extension UIView
{
    func getImgFromVyuFnc() -> UIImage
    {
        UIGraphicsBeginImageContext(self.frame.size)

        self.layer.renderInContext(UIGraphicsGetCurrentContext()!)
        let image = UIGraphicsGetImageFromCurrentImageContext()

        UIGraphicsEndImageContext()
        return image!
    }
}
0
Sujay U N