Файл PaintCode в SKShapeNode

Я мог бы использовать несколько указателей для преобразования файлов 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 может принимать только один путь, но, возможно, их можно каким-то образом связать?

Вторая проблема заключается в том, что градиентные цвета не работают.

Чтобы превратить этот файл в SKShapeNode, я сделал следующее: 1. импортировал SpriteKit 2. изменил расширение класса с NSObject на SKShapeNode 3. переименовал функцию рисования 4. создал функцию инициализации для узла формы, которая устанавливает имя и дорожка

Я рад получить любые советы по этому типу преобразования. Спасибо!


person zeeple    schedule 30.07.2014    source источник
comment
используйте несколько узлов формы, по одному для каждого пути. Узлы формы не поддерживают цветовые градиенты.   -  person LearnCocos2D    schedule 30.07.2014
comment
Вы можете программно создать UIImage с помощью кода PaintCode, создать SKTexture с этим изображением и SKSpriteNode с этой текстурой.   -  person 0x141E    schedule 30.07.2014
comment
Вы также можете добавить UIBezierPath к существующему с помощью метода appendPath.   -  person 0x141E    schedule 30.07.2014
comment
Как можно создать UIImage из кода PaintCode?   -  person Nas5296    schedule 12.08.2014
comment
@ Nas5296 Вам нужно только выбрать StyleKit Image Option в Code Export для вашего холста. Затем PaintCode сгенерирует метод, возвращающий UIImage   -  person Dominique Vial    schedule 17.06.2015


Ответы (1)


Поскольку градиентные цвета все равно не работают в узлах SKShapNode, я решил визуализировать файлы PNG из PaintCode и создать с ними узлы SKSpriteNodes. Не то решение, на которое я надеялся, но оно есть.

person zeeple    schedule 14.08.2014