gpt4 book ai didi

ios - CoreGraphics - 仅混合 View 的*部分*

转载 作者:技术小花猫 更新时间:2023-10-29 10:27:49 24 4
gpt4 key购买 nike

我最近看到这篇关于使用 UITableViewCells 提高滚动性能的精彩文章:http://engineering.twitter.com/2012/02/simple-strategies-for-smooth-animation.html -- 虽然可以在本文中找到许多很棒的技巧,但有一个特别让我感兴趣:

Tweets in Twitter for iPhone 4.0 have a drop shadow on top of a subtle textured background. This presented a challenge, as blending is expensive. We solved this by reducing the area Core Animation has to consider non-opaque, by splitting the shadow areas from content area of the cell.

使用 iOS 模拟器,点击Debug - Color Blended Layers 会显示如下内容:

TwitterTableViewCell

标记为红色的区域是混合的,绿色区域是不透明的。伟大的。这篇文章没有提到的是:我如何实现这个?据我了解,UIView 要么是不透明的,要么不是。在我看来,实现此目的的唯一方法是使用 subview ,但文章明确指出这是一个天真的实现:

Instead, our Tweet cells contain a single view with no subviews; a single drawRect: draws everything.

那么我如何区分不透明的部分和不在我的单个 drawRect: 方法中的部分?

最佳答案

在您展示的示例中,我认为他们不会通过 View 显示背景。我认为他们正在模拟核心图形中的背景。换句话说,在每个单元格中,他们为背景绘制浅灰色。然后他们绘制阴影(使用透明度),最后他们在顶部绘制其余的不透明内容。我可能是错的,但我不相信您可以使部分 View 透明。如果是这样,我会对它非常非常感兴趣,因为我一直使用核心图形,但我避免使用圆角,因为为此混合整个 View 似乎不值得。

更新

在做了更多研究并查看了 Apple 的文档之后,我认为只有部分 View 是不透明的是不可能的。此外,在阅读了 Twitter 的博客文章后,我认为他们并不是在说他们这样做了。请注意,当他们说:

Instead, our Tweet cells contain a single view with no subviews; a single drawRect: draws everything.

他们专门讨论了 UILabelUIImageView。换句话说,他们没有使用那些 View ,而是直接使用 Core Graphics 绘制图像。至于 UILabel,我个人使用 Core Text,因为它支持更多字体,但它们也可能使用更简单的方法,如 NSString 的 drawAtPoint:withFont: 方法。但他们试图传达的主要观点是,单元格的内容都是一张 CG 绘图。

然后他们转到一个新部分:避免混合。在这里,他们强调说他们通过以下方式避免混合:

splitting the shadow areas from content area of the cell.

做到这一点的唯一方法是使用不同的 View 。他们可以使用两种方法,但首先请注意,单元格分隔符本身就是叠加层(由 tableView 提供)。第一种方法是在单元格内使用多个 View 。第二种方法是通过将适当的 View 插入 UIScrollView 来在单元格后面/上方隐藏/覆盖阴影/混合 View 。鉴于他们之前关于每个单元格只有一个 view/drawRect 的声明,这可能就是他们正在做的。每种方法都会有其挑战,但我个人认为将单元格拆分为 3 个 View (阴影、内容、阴影)会更容易。这将使处理第一个/最后一个单元格情况变得容易得多。

关于ios - CoreGraphics - 仅混合 View 的*部分*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10559402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com