调整PaintCode生成的路径

时间:2014-10-26 23:45:43

标签: svg uiview swift core-graphics uibezierpath

我使用PaintCode将我必须使用的一组SVG转换为Swift代码。看起来它只是将SVG路径转换为UIBezierPath() s,这很棒。

要显示生成的代码,请执行以下操作:

class FirstImageView: UIView {

    init(name: String) { // Irrelevant custom init
        super.init(frame: CGRectMake(15, 15, 40, 40)) // 40x40 View
        self.opaque = false // Transparent background
    }

    override func drawRect(rect: CGRect) {
        ImagesCollection.firstImage() // Fill the view with this image
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

}

ImagesCollection.firstImage()引用的位置:

public class ImagesCollection: NSObject {

    public class func firstImage() {
        let color4 = UIColor(red: 0.595, green: 0.080, blue: 0.125, alpha: 1.000)
        var fill295Path = UIBezierPath()
        fill295Path.moveToPoint(CGPointMake(27.5, 2.73))
        // Rest of generated graphics code
    }

}

哪个效果很好 - 我以40x40生成图形,将帧设置为40x40,并且工作正常。我现在想知道的是,如何以更小(或更大的尺寸)显示相同的图形 - 因为它们应该更好地缩小路径,对吧?将我的视图框架设置为CGRectMake(15, 15, 20, 20)(对于所需的20x20图像)似乎只是剪切图形。

如何确保在我的视图中绘制的图形大小适合视图的框架?

由于

3 个答案:

答案 0 :(得分:2)

您可以使用CGAffineTransform缩放自定义视图或贝塞尔曲线路径本身。

  1. 缩放视图:

    myFirstImageView.transform = CGAffineTransformMakeScale(0.5, 0.5)
    
  2. 缩放bezier路径:

    // ...
    // lots of generated graphics code
    fill295Path.applyTransform(CGAffineTransformMakeScale(0.5, 0.5))
    fill295Path.stroke() // or fill, etc.
    

答案 1 :(得分:1)

由于您使用PaintCode生成代码,因此可以在SVG / Bezier周围绘制Frame对象。它将生成具有动态大小的Bezier。在您的示例中,您将获得ImagesCollection.firstImage(#frame: CGRect)而不是ImagesCollection.firstImage()。您只需将矩形从drawRect传递给它即可。

答案 2 :(得分:0)

稍微偏离主题,但根据Nate的要求,我是如何用SVGKit做的:

  • 首先,您需要按照these说明将SVGKit合并到您的项目中
  • 使用SVG文件中的标记,使用SVGKParser解析SVG数据:

let svgData: String = "<svg>...</svg>"

let svgParse: SVGKParser = SVGKParser(source: SVGKSource(inputSteam: NSInputStream(data: svgData.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!)))

svgParse.addDefaultSVGParserExtensions()

  • 从那里你将使用SVGKImage类型将其加载到图像中:

var svgImage: SVGKImage = SVGKImage(parsedSVG: svgResult, fromSource: nil)

  • 最后,您可以将其用作SVGKFastImageView中的图像:

SVGKFastImageView(SVGKImage: svgImage)