con*_*are 8 iphone cocoa-touch uitableview uiview
我不是图形专家,但我通过将背景视图设置为带有一些CG代码的backgroundView,以某种方式设法制作了一些外观漂亮的自定义UITableViewCells.在所有SDK中高达3.1.3(可能是3.2 ......我还没有在iPad上测试过)这很好用,但我认为更新的SDK已经引入了图形缓存在屏幕外的方式的变化.
在第一次渲染时,一切都很棒:绘图很好,角落是透明的.如果我在导航堆栈上按下几个视图控制器并返回,则视图中现在出现黑角:
alt text http://new.tinygrab.com/c1f9e8196b4b92e6bb4d3130a7e08974.png 替代文字http://new.tinygrab.com/531ee83e42cdeadc78d418d1c5e7c513.png
我有很多代码,其中大部分是在这里写的.我已尽力调整我的能力,查看适用更改的文档,但在至少8小时之后我仍然无法找到可能导致此问题的原因.我已经尝试设置每一个观点我能想到的是backgroundColor=clearColor
和opaque=NO
我失去了还有什么?任何调试技巧?
我有一些调试代码,viewDidAppear
用于打印所有子视图的backgroundColor和类描述.
- (void)debugView:(UIView *)view {
DebugLog(@"%@ - %@", view.backgroundColor, [[view class] description]);
for (UIView* child in view.subviews) {
[self debugView:child];
}
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[DownloadController.networkQueue setSuspended:NO];
for (TTTableViewCell *cell in [self.tableView visibleCells]) {
[cell debugView:cell];
}
}
Run Code Online (Sandbox Code Playgroud)
使用此代码,我会在第一次加载时检查单元格视图的backgroundColor设置,当它正常时,然后在返回后再次检查.虽然存在一些差异,但所有颜色仍然很清晰.这让我相信UITableViewCell下面的问题.
我创建了一个简单的示例应用程序来突出显示问题.
我测试了样本应用程序,可以重现黑角问题.
经过一些实验,似乎黑角问题与用于渲染表视图的层的缓存有关.单元格层的几何形状似乎很重要:
为了摆脱黑角你可以:
[UIColor groupTableViewBackgroundColor].CGColor
填充颜色; 它是基于图案的颜色,遵循设备方向(是的); 但这幅画与背景并不完全一致(该死的).CGImage
,将其设置为图层的内容,并将遮罩层指定给单元格的图层.不确定性能.希望它有所帮助.
更新
经过一些不成功的尝试后,我放弃了面具的想法,因为它太笨拙了.
我已经重新阅读了单元格层的代码,并找到了一种以简单的方式去除黑角的方法.基本思想是,CAGradientLayer
只有当渐变颜色清晰时,a 才是完全透明的.通过使用以下display
方法,黑角消失(在模拟器和设备上):
- (void)display {
if (_override) {
self.colors =
[NSArray arrayWithObjects:
(id)[UIColor colorWithRed:colorComponents[0] green:colorComponents[1] blue:colorComponents[2] alpha:colorComponents[3]].CGColor,
(id)[UIColor colorWithRed:colorComponents[4] green:colorComponents[5] blue:colorComponents[6] alpha:colorComponents[7]].CGColor,
nil];
} else {
self.colors =
[NSArray arrayWithObjects:
(id)[UIColor clearColor].CGColor,
(id)[UIColor clearColor].CGColor,
nil];
}
[super display];
}
Run Code Online (Sandbox Code Playgroud)
当然,这可以稍微优化一下:
override
更改图层颜色的属性的自定义setter .display
不再需要的方法. 归档时间: |
|
查看次数: |
2778 次 |
最近记录: |