ios – CoreGraphics – 仅混合*部分*的视图

我最近遇到了关于使用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模拟器,单击调试 – 颜色混合图层将显示如下:

红色标记区域混合,绿色区域不透明.大.文章没有提到的是:我该如何实现?我的理解是,UIView不透明或不是.在我看来,完成这个任务的唯一方法是使用子视图,但文章明确指出,作为一个天真的实现:

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

那么我该如何剖析什么是不透明的,什么不是在我的单一drawRect:方法?

解决方法

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

更新

在进行更多的研究和查看苹果的文档之后,我不认为只有部分视图是不可能的.此外,在阅读Twitter的博客文章后,我不认为他们这样做.请注意,当他们说:

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

他们特别在谈论UILabel和UIImageView.换句话说,而不是使用这些视图,他们直接使用Core Graphics绘制图像.对于UILabels,我个人使用Core Text,因为它具有更多的字体支持,但是他们也可能使用像NSString的drawAtPoint :withFont:method这样更简单的东西.但是他们想要解决的主要问题是单元格的内容都是一个CG绘图.

然后他们移动到一个新的部分:避免混合.在这里,他们提出一个要点:他们避免混合:

splitting the shadow areas from content area of the cell.

执行此操作的唯一方法是使用不同的视图.他们可以使用两种方法,但首先要注意的是,单元分隔符本身就是overlayView(由tableView提供).第一种方法是在单元格中使用多个视图.第二种方法是通过将适当的视图插入到UIScrollView中,来覆盖/覆盖单元格后面的阴影/混合视图.鉴于他们之前关于每个单元格只有一个视图/ drawRect的说法,这可能是他们正在做的.每种方法都有其挑战,但是我个人认为将单元格分割成3个视图(阴影,内容,阴影)会更容易.这将使处理第一/最后一个单元格情况变得更加容易.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...