我正在尝试创建应用的一部分,用户可以在其中绘制自由式形状并使用图像填充这些形状。
我尝试过使用UIBezierPaths和CAShapeLayers,并且能够创建一个用单一颜色填充所有图像的绘图应用程序。
我希望每个形状都能够填充不同的颜色,因此最终可以用单独的图像填充各个形状。
我在分离每张图纸时遇到问题,因此可以单独填写,并且到目前为止还无法用图像填充图纸。
如果有人建议我采取其他方式,我会很感激任何想法!
答案 0 :(得分:0)
您是否考虑过将SpriteKit
用于应用的绘图部分?使用Spritekit
,您可以使用SKShapeNode
创建形状,并使用fillColor
SKShapeNode
属性填充不同的颜色。要使用图片填充新创建的形状,您可以将图片放在SKSpriteNode
中,然后使用SKCropNode
裁剪,并将maskNode
的{{1}}属性设置为{{1}你创造了。
Eample:
SKCropNode
棘手的部分是重新定位SKShapeNode
和import UIKit
import SpriteKit
class DrawView: SKScene {
override func didMoveToView(view: SKView) {
scaleMode = .ResizeFill
backgroundColor = UIColor.whiteColor()
//creating a triangle and filling it with the color blue
let path = CGPathCreateMutable()
CGPathAddArc(path, nil, 160, 284, 0, 0, CGFloat(M_PI*2), true)
CGPathAddLineToPoint(path, nill, 60, 184)
CGPathAddLineToPoint(path, nill, 260, 184)
CGPathAddLineToPoint(path, nill, 60, 284)
let triangle = SKShapeNode()
triangle.lineCap = .Round
triangle.lineJoin = .Round
triangle.fillColor = UIColor.blueColor()
triangle.path = path
addChild(triangle)
//placing image into SKSpriteNode
let image = SKSpriteNode(imageNamed: "yourImage")
image.size = CGSizeMake(320, 568)
image.position = CGPointMake(160, 284)
//creating an SKCropNode
let imageCrop = SKCropNode()
imageCrop.position = CGPointMake(0, 0)
imageCrop.addChild(image) //adding image to the SKCropNode
imageCrop.maskNode = triangle //using the triangle created as a mask
addChild(imageCrop)
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
//create spritekit scene
let skView = SKView(frame: CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height))
skView.center = CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height/2)
self.view.addSubview(skView)
//add drawing view to the scene
let drawView = DrawView()
sKView.presentScene(drawView)
}
}
以填充SKSpriteNode
。