RoL*_*LLs 7 iphone core-graphics uitableview calayer ios
我搜索了这个论坛,谷歌和其他论坛,但没有找到我的特定问题的答案.
基本上,我有一个UIView包含UITableView.我按照本教程进行了部分成功.问题是梯度.我背后有一个背景图片UITableView.因此,当细胞接近渐变时,我想要显示背景,而不是白色.
我也找到了这篇文章,这是我找到教程的地方,但我不想用我自己的问题来劫持那篇帖子.
任何正确方向的帮助都会很棒!
编辑1:我知道我可以使用背景图像和中间剪切的另一个图像,但我正在寻找AVOIDS使用PNG的解决方案,如果可能的话.
编辑2:这是我现在得到的图像:

EDIT3:
这是我的代码:
标题:
@interface MyView : UIViewController {
CAGradientLayer *_maskLayer;
UITableView *_tableView;
}
@property (nonatomic, retain) CAGradientLayer *maskLayer;
@property (nonatomic, retain) IBOutlet UITableView *tableView;Run Code Online (Sandbox Code Playgroud)
执行:
@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]];
}
}Run Code Online (Sandbox Code Playgroud)
rob*_*off 23
您可以使用CALayer mask酒店进行此操作.但是您无法在表视图的自己的图层上设置蒙版,因为该蒙版将与表的行一起滚动.相反,将表视图放在UIView为此创建的新的superview(类)中.叫它tableMaskView.
新的superview应将其backgroundColor属性设置为UIColor.clearColor并将其opaque属性设置为NO.然后你可以像这样设置它的面具:
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.tableMaskView.bounds;
gradient.colors = [NSArray arrayWithObjects:
(__bridge id)UIColor.clearColor.CGColor,
UIColor.whiteColor.CGColor,
UIColor.whiteColor.CGColor,
UIColor.clearColor.CGColor,
nil];
gradient.locations = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0],
[NSNumber numberWithFloat:1.0/16],
[NSNumber numberWithFloat:15.0/16],
[NSNumber numberWithFloat:1],
nil];
self.tableMaskView.layer.mask = gradient;
Run Code Online (Sandbox Code Playgroud)
使用图层蒙版不是最有效的方法,但它是最容易编程的.测试它是否足够快.
听起来您的表格视图的背景颜色设置为白色。尝试将表格视图的背景设置为透明:
tableView.backgroundColor = [ UIColor clearColor ] ;
tableView.opaque = NO ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7256 次 |
| 最近记录: |