iphone – 顶部和底部透明渐变的UITableView

栏目: IOS · 发布时间: 6年前

内容简介:翻译自:https://stackoverflow.com/questions/9105773/uitableview-with-transparent-gradient-at-top-and-bottom

我搜索了这个论坛,谷歌和其他论坛,但没有找到我的特定问题的答案.

基本上,我有一个包含UITableView的UIView.我跟着这个 tutorial 并且部分成功了.问题是梯度.我在UITableView后面有一个背景图片.因此,当细胞接近渐变时,我希望背景显示,而不是白色.

我也找到了这个 post ,这是我找到教程的地方,但我不想用我自己的问题来劫持那个帖子.

任何正确方向的帮助都会很棒!

编辑1:我知道我可以使用背景图像和中间剪切的另一个图像,但我正在寻找AVOIDS使用PNG的解决方案,如果可能的话.

编辑2:这是我现在得到的图像:

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]];
    }
}

您可以使用CALayer掩码属性执行此操作.但是您无法在表视图的自己的图层上设置蒙版,因为该蒙版将与表的行一起滚动.相反,将您的表视图放在您为此创建的新superview(UIView类)中.称之为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;

使用图层蒙版不是最有效的方法,但它是最容易编程的.测试它是否足够快.

翻译自:https://stackoverflow.com/questions/9105773/uitableview-with-transparent-gradient-at-top-and-bottom


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

On LISP

On LISP

Paul Graham / Prentice Hall / 09 September, 1993 / $52.00

On Lisp is a comprehensive study of advanced Lisp techniques, with bottom-up programming as the unifying theme. It gives the first complete description of macros and macro applications. The book also ......一起来看看 《On LISP》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具