Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 石英阴影绘制不正确_Iphone_Objective C_Cocoa Touch - Fatal编程技术网

Iphone 石英阴影绘制不正确

Iphone 石英阴影绘制不正确,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,因此,我的应用程序中有这样一个图像: 现在这一切都很好,但我正试图减少对图像的依赖,而是尝试动态绘制 好的,我在UIColor:(scrollViewTexturedBackgroundColor)中找到了这幅图像 看起来有点轻,但很甜。我们快到了 现在,我重写UIView子类中的drawRect,使其变暗一点 -(void)drawRect:(CGRect)rect { [[UIColor colorWithWhite:0.0 alpha:0.4] setFill]; UI

因此,我的应用程序中有这样一个图像:

现在这一切都很好,但我正试图减少对图像的依赖,而是尝试动态绘制

好的,我在
UIColor
:(scrollViewTexturedBackgroundColor)中找到了这幅图像

看起来有点轻,但很甜。我们快到了

现在,我重写
UIView
子类中的
drawRect
,使其变暗一点

-(void)drawRect:(CGRect)rect {
    [[UIColor colorWithWhite:0.0 alpha:0.4] setFill];
    UIRectFillUsingBlendMode(rect , kCGBlendModeDarken);
}
嘿,虽然不完美,但已经够近了。我可以在以后调整混合模式和颜色。现在是最难的部分。我不知道怎样才能让阴影画得正确。例如,我尝试如下设置我的阴影:

CGContextSetShadowWithColor(ctx, CGSizeMake(0, 6), 5, [[UIColor blackColor]CGColor]);

但是,阴影不会显示。此外,我还尝试保存图形状态,应用阴影,然后恢复它,但当我这样做时,阴影出现,但颜色相反(可能是由于我设置的混合模式)。显然这不是我所希望的


有什么想法吗?

阴影是用画出来的东西渲染的。你不能只画一个阴影而不画掉它的实际物体。如果你有办法,请告诉我

我在第一张图片上看到你使用了内部阴影效果。要获得类似的结果,您需要绘制一条在该区域周围投射阴影的路径

在图片上,红色路径是一条笔划为10px的贝塞尔路径。我在图片和路径之间留了一个东西的间隙,以显示路径比背景图片大。 要生成这样的路径,可以使用带rect的贝塞尔路径。按等于笔划宽度一半的负值插入背景图片rect


如果实际上下文比图片大,请在绘制路径之前用picture rect将其剪切。

有趣的是,我将研究它。老鼠。我真的是一个新手在石英绘制,我不知道如何绘制贝塞尔路径。关于如何做到这一点,有什么建议吗?UIBezierPath是一条非常狭窄的道路。您可以使用
[UIBezierPath-bezierpath-withrect:
来构造路径,并使用
[path-stroke]
来绘制路径。结果非常简单。我花了一段时间才明白,在设置阴影后,我需要绘制贝塞尔曲线。谢谢你的回答!