2017-06-01 1 views
0

Je suis nouveau dans l'utilisation de l'image SVG. J'ai utilisé l'image svg dans iOS. Je reçois CALayer en utilisant SVGKLayeredImageView. Et changer la couleur de la partie différente de l'image SVG. Maintenant, je suis resté sur le point, Comment sauvegarder l'image localement avec des calques modifiés. Ceci est mon code. S'il vous plaît examiner et me donner une bonne opinion. Merci d'avance.Comment enregistrer et récupérer l'image svg dans swift.

var layer = CALayer() 

let svgImage = SVGKImage(named: "Bella_1.svg") 

let imageView: SVGKLayeredImageView? = SVGKLayeredImageView.init(svgkImage: svgImage) 
imageView?.sizeToFit() 
Character_view.addSubview(imageView!) 

layer = (imageView?.layer)! 

func haircolor_Selection() { 
     for subLayer: CALayer in (layer.sublayers)! 
     { 
      print("%@", subLayer.self) 
      for subSubLayer: CALayer in subLayer.sublayers! 
      { 
       print("%@", subSubLayer.self) 
       for subSubSubLayer: CALayer in subSubLayer.sublayers! 
       { 
        print("%@", subSubSubLayer.self) 
        for subSubSub1Layer: CALayer in subSubSubLayer.sublayers! { 
         print("%@", subSubSub1Layer.self) 
         if(subSubSub1Layer.name == "hair") 
         { 
          for subHairLayer: CALayer in subSubSub1Layer.sublayers!{ 
           print("[email protected]", subHairLayer.self) 

           if(subHairLayer.name == "main-colour_1_") 
           { 

            changeFillColorRecursively(sublayers: [subHairLayer], color: image_Color) 
           } 
          } 

         } 

        } 
       } 
      } 
     } 

    } 
func changeFillColorRecursively(sublayers: [CALayer], color: UIColor) { 
     for layer_object in sublayers { 
      if let l = layer_object as? CAShapeLayer { 
       l.fillColor = color.cgColor 
      } 
      if let l = layer_object as? CALayer, let sub = l.sublayers { 
       changeFillColorRecursively(sublayers: sub, color: color) 
      } 
     } 
    } 

Je veux enregistrer cette image svg modifiée, S'il vous plaît donner une réponse pour cela. En attente de réponse.

Répondre

0

Utilisez SVGKExporterNSData pour obtenir un objet NSData puis écrire que dans un fichier en utilisant l'une des méthodes write de NSData. Quelque chose comme (note: non testé):

let data = SVGKExporterNSData.exportAsNSData(image: svgImage) 
data.write(toFile: filePath, atomically: true) 

Aussi, plutôt que toutes les boucles imbriquées que vous utilisez pour obtenir la couche « cheveux », jetez un oeil à la méthode layerWithIdentifier sur SVGKImage. Il y a un exemple dans this list of SVGKit recipes - recherchez "Trouver le CALayer qui a été généré à partir d'un SVGElement particulier" sur cette page.