iphone - quartz 阴影无法正确绘制

标签 iphone objective-c cocoa-touch

所以,我的应用程序的图像如下所示:

enter image description here

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

好的,所以我发现这个图像内置于 UIColor 中:(scrollViewTexturedBackgroundColor)

enter image description here

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

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

-(void)drawRect:(CGRect)rect {
    [[UIColor colorWithWhite:0.0 alpha:0.4] setFill];
    UIRectFillUsingBlendMode(rect , kCGBlendModeDarken);
}

嘿,它并不完美,但已经足够接近了。我以后随时可以调整混合模式和颜色。现在是最困难的部分。我不知道如何正确绘制阴影。例如,我尝试像这样设置我的阴影:

enter image description here

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

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

有什么想法吗?

最佳答案

阴影是用绘制的东西渲染的。你不能只画一个阴影,而没有实际的物体来转换它。如果您找到方法,请告诉我。

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

enter image description here

图中红色路径是一条描边为10px的贝塞尔曲线路径。我在图片和路径之间留了一个间隙,以显示路径比背景图片大。 要生成这样的路径,您可以使用带有 rect 的贝塞尔路径。将背景图片矩形插入等于描边宽度一半的负值。

如果实际上下文比图片大,请在绘制路径之前将其与图片矩形一起裁剪。

关于iphone - quartz 阴影无法正确绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7721132/

相关文章:

iphone - MapQuest ios API无法请求路线

objective-c - 在 iCal 上获取/设置日历事件(以编程方式)

iphone - 为什么我不能使用 NSDateFormatter dateFromString 从 NSString 获取年份?

ios - 在 Xcode 项目中组织文件并以编程方式获取文件夹列表

ios - 如何添加到 UINavigationController 推送动画,而不是替换它?

iphone - 使用发布版本配置进行编译时,应用程序立即在iOS 3.x上崩溃

ios - iOS 8 上的 UIWebView 崩溃

iphone - 用 for 循环中的数据填充 NSMutableArray

iphone - 表格 View 单元格 附件类型 自定义位置的复选标记

objective-c - UITableView+UINavigationBar+UITabbar 在基于 windows 的应用程序模板中使用界面生成器?