3个回答

0

试试这个

class myView {

var crayon = UIColor(patternImage: UIImage(named: "acrayontexture")!)

重写 func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { firstTouch = (touches.first?.location(in: self))! aPath.move(to: firstTouch)

} 

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    if firstTouch != lastTouch {
        lastTouch = (touches.first?.location(in: self))! ;
         aPath.addLine(to: lastTouch)

        setNeedsDisplay()
        }
 override func draw(_ rect: CGRect) {

    let context = UIGraphicsGetCurrentContext() ;
    context?.addPath(aPath)
    context?.setLineWidth(10.0)
    context?.setStrokeColor(crayon.cgColor) ;
    context?.setLineCap(.round)
    context?.setShadow(offset: CGSize(width: 5.0 , height: 4.0), blur: 4.0) ;
    //
    context?.strokePath()

}

    }    
}

`


0

您可以参考下面的链接开始。在这里,您可以按照教程中给出的RGB值更改笔或蜡笔的颜色。

http://www.ifans.com/forums/showthread.php?t=132024

您可以在屏幕上提供表示不同颜色的按钮,并根据点击的按钮设置当前笔的RGB值,然后使用手工填充颜色。
希望这可以帮助您。

@PARTH 谢谢你提供的链接,但是我无法从这个链接中实现蜡笔效果,你能帮助我吗? - Mustafa Saify
好的。您能否解释一下您需要什么样的帮助以及您在这方面不理解的内容?另外,您能否将您的电子邮件地址发送给我,以便我可以向您发送示例代码? - Parth Bhatt
你提到的教程很棒,但我的问题是我无法生成看起来像蜡笔画出来的线条。希望你能帮我解决这个问题。我的电子邮件地址是:mustafasaify04@yahoo.in。虽然我可以用手指在屏幕上画图,但无法产生蜡笔效果。 - Mustafa Saify
@Mustafa Saify:对于蜡烛效果,我认为您需要在代码中进行一些微小的更改。我的意思是,在代码的微调可以帮助您实现这一目标。 - Parth Bhatt
@PARTH:我对代码进行了一些操作,例如修改alpha + smoothness等,但无法生成我想要的效果...应用程序如“Crayola”和“Crayon Physics”包含此效果... - Mustafa Saify
@Mustafa Saify:我会检查它们并尽快回复您 :) - Parth Bhatt

0

在drawRect中使用的标准Quartz调用实际上不会给您提供您正在寻找的蜡笔效果,也不会使用任何默认行为。

最简单的实现方法是创建一系列透明的蜡笔纹理,至少在刚开始时可以让您更好地理解。Photoshop、Fireworks和许多其他绘图应用程序已经具有蜡笔效果的画笔和线条样式,因此您可以在透明背景上尝试几个样式以获得可用的“斑点”(小圆形蜡笔外观的透明PNG)。

然后,当用户在设备上拖动手指时,记录路径并沿着路径绘制这些“斑点”图像。如果人们来回画,就会放下更多的颜色,从而获得更深的(更实心/不透明)颜色。

这是解决此问题的一种非常粗略但常见的方法。您可以使用遮罩、图案、渐变和其他Quartz方法变得非常聪明,但是要交付您想要的内容的复杂性可能会超过图像方法的简单性。

以下是一些建议,以获得最佳效果:

  1. 你可以使用HSV(色相-饱和度-明度)从单个初始图像集创建一系列颜色变化,以获得各种蜡笔颜色。这可以在代码或图形程序中完成。
  2. 在图像中添加一些非常浅的灰度阴影可以赋予它们深度和粗糙度,即使您将图像叠加多次,也会保留这种效果,并且在进行HSV调整时不会过滤掉灰度。这可以防止蜡笔变成纯色。
  3. 当用户拖动时,连续记录路径(x,y),大小,“斑点”选择和颜色,但根据触摸按下/抬起或最大大小将其分段,这样您就可以提供逐步“撤消”功能。
  4. 您可以通过将它们呈现到离屏缓冲区中来将(3)中的“段”转换为单个图像。这将允许您仅使用少量透明图像重新绘制整个作品,而不是每次都使用数千个小的“斑点”。
  5. 如果您熟悉OpenGL,即使对于2D,它也可以操作“斑点”源图像,离屏渲染和分层,比您在CoreGraphics中必须执行的代码要少得多,从而获得良好的性能提升。不幸的是,设置OpenGL会添加大量代码,并且可能非常令人困惑。
希望这足够清晰,并给您一些想法。
请记住,一旦掌握了这种方法,您可以用任何东西绘画。除了蜡笔纹理外,您还可以拥有霓虹发光、星星、粒子效果以及几乎您能想象到的任何东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接