Swift 将PaintCode文件复制到SKShapeNode

Swift 将PaintCode文件复制到SKShapeNode,swift,sprite-kit,skshapenode,paintcode,Swift,Sprite Kit,Skshapenode,Paintcode,我可以使用一些指针将PaintCode文件转换为SKShapeNodes,以便在我正在构建的应用程序中使用。我正在努力克服以下两个具体问题。我正在使用Xcode 6 beta 4、SpriteKit、Swift和PaintCode进行项目。首先,守则: import UIKit import SpriteKit class Ad_disclighttop : SKShapeNode { var ovalPath: UIBezierPath = UIBezierPath() v

我可以使用一些指针将PaintCode文件转换为SKShapeNodes,以便在我正在构建的应用程序中使用。我正在努力克服以下两个具体问题。我正在使用Xcode 6 beta 4、SpriteKit、Swift和PaintCode进行项目。首先,守则:

import UIKit
import SpriteKit

class Ad_disclighttop : SKShapeNode {

    var ovalPath: UIBezierPath = UIBezierPath()
    var oval2Path: UIBezierPath = UIBezierPath()

    init()  {
        super.init()
        drawDisc()
        self.name = "White Disc"
        self.path = ovalPath.CGPath
    }

    //// Initialization

    override class func load() {
    }

    //// Drawing Methods

    func drawDisc() {
        //// General Declarations
        let context = UIGraphicsGetCurrentContext()

        //// Color Declarations
        let xFFFFFF66 = UIColor(red: 1.000, green: 1.000, blue: 1.000, alpha: 0.400)
        let x00000066 = UIColor(red: 0.000, green: 0.000, blue: 0.000, alpha: 0.400)

        //// Gradient Declarations
        let markerTopGradient = CGGradientCreateWithColors(CGColorSpaceCreateDeviceRGB(), [xFFFFFF66.CGColor, x00000066.CGColor], [0.01, 1])

        //// MarkerW_04
        //// Oval Drawing
        ovalPath = UIBezierPath(ovalInRect: CGRectMake(0, 0, 60, 60))
        UIColor.whiteColor().setFill()
        ovalPath.fill()
        x00000066.setStroke()
        ovalPath.lineWidth = 1
        ovalPath.stroke()


        //// Oval 2 Drawing
        oval2Path = UIBezierPath(ovalInRect: CGRectMake(2.5, 2.5, 57, 57))
        CGContextSaveGState(context)
        oval2Path.addClip()
        CGContextDrawRadialGradient(context, markerTopGradient,
            CGPointMake(35.87, 38.3), 20.28,
            CGPointMake(23.16, 25.59), 40.36,
            UInt32(kCGGradientDrawsBeforeStartLocation) | UInt32(kCGGradientDrawsAfterEndLocation))
        CGContextRestoreGState(context)
    }

}

@objc protocol StyleKitSettableImage {
    var image: UIImage! { get set }
}

@objc protocol StyleKitSettableSelectedImage {
    var selectedImage: UIImage! { get set }
}
我遇到的第一个问题是,我生成的几乎每个非平凡的PaintCode文件中都有多个UIBezierPath。据我所知,SKShapeNode的path属性只能采用一条路径,但也许可以通过某种方式将它们链接起来

第二个问题是渐变色似乎不起作用

我实际将此文件转换为SKShapeNode所做的工作是: 1.进口SpriteKit 2.将类扩展从NSObject更改为SKShapeNode 3.重命名绘图函数 4.为设置名称和路径的形状节点创建init函数


我很高兴收到任何关于这种转换类型的提示。谢谢

由于渐变颜色在SKShapNode节点中无论如何都不起作用,我决定从PaintCode中渲染PNG文件,并用它们创建SKSpriteNodes。这不是我所希望的解决方案,但事实就是如此。

使用多个形状节点,每个路径一个。形状节点不支持颜色渐变。您可以使用PaintCode代码以编程方式创建UIImage,使用该图像创建SKTexture,和具有该纹理的SKSpriteNode。您还可以使用appendPath方法将UIBezierPath添加到现有UIBezierPath。如何从PaintCode代码创建UIImage?@Nas5296您只需在canva的代码导出中选择StyleKit Image选项。然后,PaintCode将生成一个返回
UIImage