iOS UITableView:使用 CAGradientLayer 将背景颜色分配为渐变
Posted
技术标签:
【中文标题】iOS UITableView:使用 CAGradientLayer 将背景颜色分配为渐变【英文标题】:iOS UITableView: assign background color as gradient using CAGradientLayer 【发布时间】:2012-04-19 09:21:49 【问题描述】:我刚开始在 Xcode 4.3 中使用 Master-Detail 视图模板,我正在尝试更改 master 的背景颜色并将其设置为颜色渐变。 这是我尝试过的:
颜色.m
#import "Colors.h"
@implementation Colors
+ (UIColor *) navigationMenuGradientTop
return [UIColor colorWithRed:213.0f/255.0f green:91.0f/255.0f blue:92.0f/255.0f alpha:1.0f];
+ (UIColor *) navigationMenuGradientBottom
return [UIColor colorWithRed:188.0f/255.0f green:0.0f/255.0f blue:1.0f/255.0f alpha:1.0f];
+ (CAGradientLayer *) navigationMenuGradient
NSArray *colors = [NSArray arrayWithObjects:(id)self.navigationMenuGradientTop, self.navigationMenuGradientBottom, nil];
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.colors = colors;
return gradientLayer;
@end
MasterViewController.m
import "Colors.h"
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
CAGradientLayer *bgLayer = [Colors navigationMenuGradient];
bgLayer.frame = tableView.bounds;
[tableView.layer insertSublayer:bgLayer atIndex:0];
return cell;
运行时,main
- Thread 1: EXC_BAD_ACCESS (code=1, address=0xxxxxxxx)
出现以下错误
int main(int argc, char *argv[])
@autorelasespool
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
我也将 QuartzCore 框架添加到项目中。我在这里错过了什么?以及出现此类错误时我一般应该往哪个方向走(因为构建成功了,app似乎在这里崩溃了)?
【问题讨论】:
Gradients on UIView and UILabels On iPhone 的可能重复项 【参考方案1】:UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)] autorelease];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
[view.layer insertSublayer:gradient atIndex:0];
来自:Gradients on UIView and UILabels On iPhone
此代码可以帮助您解决问题。
【讨论】:
好吧,看来CAGradientLayer
不适用于UIColor
的数组。相反,需要一个 CGColor
数组。快速查看文档证实了这一点。 developer.apple.com/library/ios/#documentation/GraphicsImaging/…
我从来没有用过那个颜色,所以我不知道,但我正在努力解决你的问题
将 .CGColor 添加到 [UIColor] 块的末尾。例如[UIColor blackColor].CGColor
@offset 我完全做到了。【参考方案2】:
为了给视图添加背景渐变,我按照此链接上的教程进行操作:
http://danielbeard.wordpress.com/2012/02/25/gradient-background-for-uiview-in-ios/
在我的例子中,我有一个 UITableView 并且希望渐变在背景中。当我从链接中使用下面的代码时,我的表格视图消失了。
-(void) ViewWillAppear:(BOOL) animated
CAGradientLayer *bgLayer = [BackgroundLayer blueGradient];
bgLayer.frame = self.view.bounds;
[self.view.layer insertSublayer:bgLayer atIndex:0];
如下修改我的代码,可以同时拥有背景渐变和表格视图。
-(void) ViewDidAppear:(BOOL) animated
CAGradientLayer *bgLayer = [BackgroundLayer blueGradient];
bgLayer.frame = self.view.bounds;
[self.tableView.layer insertSublayer:bgLayer atIndex:0];
【讨论】:
这不是把其他两个答案合二为一吗? 您似乎还有另一个帐户可以用来为自己投票。【参考方案3】:嘿,在这里看看这个人的博客。这对我帮助很大!我根据我的要求修改了课程,瞧!
http://danielbeard.wordpress.com/2012/02/25/gradient-background-for-uiview-in-ios/
【讨论】:
以上是关于iOS UITableView:使用 CAGradientLayer 将背景颜色分配为渐变的主要内容,如果未能解决你的问题,请参考以下文章