【发布时间】:2012-02-24 17:17:30
【问题描述】:
我搜索了这个论坛、谷歌和其他论坛,但没有找到我特定问题的答案。
基本上,我有一个UIView,其中包含UITableView。我关注了这个tutorial,它部分成功了。问题是梯度。我在UITableView 后面有一个背景图片。因此,当单元格接近渐变时,我希望显示背景,而不是白色。
我还找到了这个post,这是我找到教程的地方,但我不想用我自己的问题来劫持那个帖子。
对正确方向的任何帮助都会很棒!
EDIT1:我知道我可以使用另一张带有背景图像和中间切出的图像,但我正在寻找一种避免使用 PNG 的解决方案,如果可能的话。
EDIT2:这是我现在得到的图像:
EDIT3:
这是我的代码:
标题:
@interface MyView : UIViewController {
CAGradientLayer *_maskLayer;
UITableView *_tableView;
}
@property (nonatomic, retain) CAGradientLayer *maskLayer;
@property (nonatomic, retain) IBOutlet UITableView *tableView;
实施:
@implementation HighScoresView_iPhone
@synthesize tableView = _tableView;
@synthesize maskLayer = _maskLayer;
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (![self maskLayer]) {
[self setMaskLayer:[CAGradientLayer layer]];
CGColorRef outerColor = [UIColor colorWithWhite:1.0 alpha:1.0].CGColor;
CGColorRef innerColor = [UIColor colorWithWhite:1.0 alpha:0.0].CGColor;
[[self maskLayer] setColors:[NSArray arrayWithObjects:
(id)outerColor,
(id)innerColor,
(id)innerColor,
(id)outerColor,
nil
]
];
[[self maskLayer] setLocations:[NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.2],
[NSNumber numberWithFloat:0.8],
[NSNumber numberWithFloat:1.0],
nil
]
];
[[self maskLayer] setBounds:CGRectMake(0, 0, [[self scoreTableView] frame].size.width, [[self scoreTableView] frame].size.height)];
[[self maskLayer] setAnchorPoint:CGPointZero];
[[[self scoreTableView] layer] addSublayer:[self maskLayer]];
}
}
【问题讨论】:
-
出于优化原因不建议这样做,但是您是否尝试过
cell.backgroundView.backgroundColor = [UIColor clearColor]或contentView或cell本身或它们的某种组合? -
是的,我的单元格有清晰的背景。当他们在中心时,我可以看到背景。但是当它们靠近顶部或底部时,我按照我提到的教程创建的渐变,我看到的是白色,而不是内容淡出。
-
我添加了一张图片来展示它目前的样子。
-
(图像帮助)白色渐变似乎在单元格上方,而不是在后面,你是如何将它放在那里的?
-
@RoLYroLLs 您希望您的内容在滚动视图的顶部和底部淡入背景?听起来最好的办法是剪掉部分背景视图(在您希望单元格淡出的区域),应用透明度渐变,然后将剪下的位放在滚动视图的前面(在滚动视图的超级视图)
标签: iphone ios uitableview core-graphics calayer