创建可以使用图像作为填充的绘图应用程序的最佳方法

时间:2016-08-25 12:32:37

标签: swift uiimage drawing uibezierpath cashapelayer

我正在尝试创建应用的一部分,用户可以在其中绘制自由式形状并使用图像填充这些形状。

我尝试过使用UIBezierPaths和CAShapeLayers,并且能够创建一个用单一颜色填充所有图像的绘图应用程序。

我希望每个形状都能够填充不同的颜色,因此最终可以用单独的图像填充各个形状。

我在分离每张图纸时遇到问题,因此可以单独填写,并且到目前为止还无法用图像填充图纸。

如果有人建议我采取其他方式,我会很感激任何想法!

1 个答案:

答案 0 :(得分:0)

您是否考虑过将SpriteKit用于应用的绘图部分?使用Spritekit,您可以使用SKShapeNode创建形状,并使用fillColor SKShapeNode属性填充不同的颜色。要使用图片填充新创建的形状,您可以将图片放在SKSpriteNode中,然后使用SKCropNode裁剪,并将maskNode的{​​{1}}属性设置为{{1}你创造了。

Eample:

SKCropNode

棘手的部分是重新定位SKShapeNodeimport 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