2016-06-20 6 views
2

グラデーションカラーコードを作成し、データに応じて異なる高さのダイナミックテーブルビューセルに設定したいと思います。 テーブルセルのレイヤーに追加するときにレイヤーを使用しました。テーブルのデータが読み込まれた後、正確なテーブルビューのセルの高さが必要です。iosのリロード時にダイナミックテーブルセルにグラデーションカラーレイヤーを適用する方法

-(void)setTableData:(NSMutableArray *)tableData{ 

    tableHeightConstraints.constant = cellHeight * tableData.count; 

    _tableData = tableData; 

    [self.tableView reloadData]; 

    [self layoutIfNeeded]; 

    CAGradientLayer *bgLayer = [self greyGradient]; 
    bgLayer.cornerRadius = 5.0f; 
    bgLayer.frame = CGRectMake(0, 0, self.contentView.frame.size.width, self.contentView.frame.size.height); 
    self.backgroundImageViewTc.image = [self greyImageFromGradient:bgLayer]; 

    [self layoutIfNeeded]; 
} 


+ (CAGradientLayer*) greyGradient { 

    UIColor *colorOne = [UIColor colorWithWhite:0.9 alpha:1.0]; 
    UIColor *colorTwo = [UIColor colorWithHue:0.625 saturation:0.0 brightness:0.85 alpha:1.0]; 
    UIColor *colorThree  = [UIColor colorWithHue:0.625 saturation:0.0 brightness:0.7 alpha:1.0]; 
    UIColor *colorFour = [UIColor colorWithHue:0.625 saturation:0.0 brightness:0.4 alpha:1.0]; 

    NSArray *colors = [NSArray arrayWithObjects:(id)colorOne.CGColor, colorTwo.CGColor, colorThree.CGColor, colorFour.CGColor, nil]; 

    NSNumber *stopOne = [NSNumber numberWithFloat:0.0]; 
    NSNumber *stopTwo = [NSNumber numberWithFloat:0.02]; 
    NSNumber *stopThree  = [NSNumber numberWithFloat:0.99]; 
    NSNumber *stopFour = [NSNumber numberWithFloat:1.0]; 

    NSArray *locations = [NSArray arrayWithObjects: stopOne, stopTwo, stopThree, stopFour, nil]; 
    CAGradientLayer *headerLayer = [CAGradientLayer layer]; 
    headerLayer.colors = colors; 
    headerLayer.locations = locations; 

    return headerLayer; 

} 

+ (UIImage *) greyImageFromGradient:(CAGradientLayer*) layer{ 

    UIGraphicsBeginImageContext(layer.bounds.size); 
    [layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return image; 
} 

このコードでは、正確なサイズの画像を作成できないため、ぼやけてしまいました。

+0

はあなたがセルに色を適用するか、またはあなたがしたいんなら、私に知らせて見つけることができますセルの高さを設定するには? –

+0

ダイナミックテーブルセルにグラデーションカラーを適用したい。質問は、私は動的なテーブルビューのセルの背景に設定することができますような方法で勾配の色を作成する方法です。 –

+0

あなたがしたコードを教えてもらえますか? –

答えて

3

uはウルソリューションはすべての問題

- (void)tableView:(UITableView)tableView willDisplayCell:(UITableViewCell)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ 

    TVCell mycell = (TVCell)cell; 

    CGSize size = CGSizeMake(mycell.cellBkView.frame.size.width, mycell.cellBkView.frame.size.height); 

    CAGradientLayer *bgLayer = [BackgroundLayer greyGradient]; 
    bgLayer.cornerRadius = 5.0f; 
    bgLayer.frame = CGRectMake(0, 0, size.width, size.height); 
    mycell.cellBkView.backgroundColor = [UIColor colorWithPatternImage:[BackgroundLayer greyImageFromGradient:bgLayer]]; 
} 
+0

私はwillDisplayCellメソッドを使用して、正確な動的セル高さを教えてくれます。 –

+0

あなたは歓迎します –

0

このコードを試してみてください。ここで

CGFloat cellHeight = [self tableView:self.tableView heightForRowAtIndexPath:indexPath]; 
+0

ここで、リロード後にこのコードを挿入しますか?どのようにindexPathを取得するのですか?[self.tableView indexPathsForVisibleRows] –

+0

はい高さが必要な場所。 –

+0

heightForRowAtIndexPathは利用できません –

関連する問題