【问题标题】:Resize paths generated by PaintCode调整 PaintCode 生成的路径大小
【发布时间】:2014-10-26 23:45:42
【问题描述】:

我正在使用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 图像)似乎只是剪裁了图形。

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

谢谢

【问题讨论】:

    标签: svg uiview swift core-graphics uibezierpath


    【解决方案1】:

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

    1. 缩放视图:

      myFirstImageView.transform = CGAffineTransformMakeScale(0.5, 0.5)
      
    2. 缩放贝塞尔路径:

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

    【讨论】:

    • 我实际上最终使用 SVGKit 将我的 SVG 作为核心图形加载,但您的回答仍然正确,所以谢谢!先生,所有战利品!
    • 哇哦!很高兴看到有关如何使用 SVGKit 执行操作的答案 - 您可以自己提问/回答,或在此处发布另一个答案。
    • 我相信我能做到!我将在 EOD 此处将其作为附加答案发布:)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      有点离题,但根据 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)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-15
        • 1970-01-01
        • 2011-07-24
        • 2011-11-15
        • 2011-02-05
        • 1970-01-01
        • 2016-03-08
        相关资源
        最近更新 更多