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个视图(阴影,内容,阴影)会更容易.这将使处理第一/最后一个单元格情况变得更加容易.