我正在尝试创建一个应用程序的一部分,在那里用户可以绘制自由式形状,并用图像填充这些形状。
我已经尝试使用UIBezierPaths和CAShapeLayers,并且已经能够创建一个绘图应用程序,它用一种颜色填充所有图像。
我希望每个形状都能用不同的颜色填充,所以最终每个形状都可以用不同的图像填充。
我在分离每个图形以便可以单独填充它们时遇到了问题,并且到目前为止还无法用图像填充图形。
如果任何人有其他的建议,我可以做这件事,我将不胜感激!
发布于 2016-08-26 13:01:57
你有没有想过在你的应用程序的绘图部分使用SpriteKit
?使用Spritekit
,您可以使用SKShapeNode
创建形状,并使用SKShapeNode
的fillColor
属性用不同的颜色填充它们。为了用图像填充新创建的形状,您可以将图像放在SKSpriteNode
中,然后使用SKCropNode
对其进行裁剪,并将SKCropNode
的maskNode
属性设置为您创建的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
和SKCropNode
以填充SKShapeNode
。
https://stackoverflow.com/questions/39145430
复制相似问题