当滚动时,ios uitableview淡入淡出底部单元格和顶部单元格

阿图尔·巴蒂亚(Atul Bhatia)

当它们从视图中滚动出时,我正在淡出uitableview的单元格,或者当它们向视图中滚动时,它们在淡出。我面临的问题是,如果我快速滚动,则有时完全可见的单元格仍会变暗。这是我的代码如下:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    // Fades out top and bottom cells in table view as they leave the screen
    NSArray *visibleCells = [self.tableView visibleCells];

    if (visibleCells != nil  &&  [visibleCells count] != 0) {       // Don't do anything for empty table view

        /* Get top and bottom cells */
        UITableViewCell *topCell = [visibleCells objectAtIndex:0];
        UITableViewCell *bottomCell = [visibleCells lastObject];

        /* Make sure other cells stay opaque */
        // Avoids issues with skipped method calls during rapid scrolling
        for (UITableViewCell *cell in visibleCells) {
            cell.contentView.alpha = 1.0;
        }

        /* Set necessary constants */
        NSInteger cellHeight = topCell.frame.size.height - 1;   // -1 To allow for typical separator line height
        NSInteger tableViewTopPosition = self.tableView.frame.origin.y;
        NSInteger tableViewBottomPosition = self.tableView.frame.origin.y + self.tableView.frame.size.height;

        /* Get content offset to set opacity */
        CGRect topCellPositionInTableView = [self.tableView rectForRowAtIndexPath:[self.tableView indexPathForCell:topCell]];
        CGRect bottomCellPositionInTableView = [self.tableView rectForRowAtIndexPath:[self.tableView indexPathForCell:bottomCell]];
        CGFloat topCellPosition = [self.tableView convertRect:topCellPositionInTableView toView:[self.tableView superview]].origin.y;
        CGFloat bottomCellPosition = ([self.tableView convertRect:bottomCellPositionInTableView toView:[self.tableView superview]].origin.y + cellHeight);

        /* Set opacity based on amount of cell that is outside of view */
        CGFloat modifier = 1.2;     /* Increases the speed of fading (1.0 for fully transparent when the cell is entirely off the screen,
                                 2.0 for fully transparent when the cell is half off the screen, etc) */
        CGFloat topCellOpacity = (1.0f - ((tableViewTopPosition - topCellPosition) / cellHeight) * modifier);
        CGFloat bottomCellOpacity = (1.0f - ((bottomCellPosition - tableViewBottomPosition) / cellHeight) * modifier);

        /* Set cell opacity */
        if (topCell) {
            topCell.alpha = topCellOpacity;
        }
        if (bottomCell) {
            bottomCell.alpha = bottomCellOpacity;
        }  
    }
}

关于为什么当我快速快速滚动查看时,有时看到的单元格仍然变暗的想法?

问题在于,滚动事件不会总是经常发生,以至于滚动到视图中的单元格从顶部/底部滚动到中间时,将从淡入的alpha变为1.0的alpha。但是,当您真正快速滚动时,scrollViewDidScroll调用频率不够高,无法确保确实如此。而且您显然要重置的循环alpha正在更新alpha错误视图的视图(contentView而不是单元格本身)。

您可以通过替换现有for循环来解决此问题

for (UITableViewCell *cell in visibleCells) {
    cell.contentView.alpha = 1.0;
}

for (UITableViewCell *cell in visibleCells) {
    cell.alpha = 1.0;
}

或者,从那里消除该循环,然后替换设置顶部和底部单元格的Alpha的行:

if (topCell) {
    topCell.alpha = topCellOpacity;
}
if (bottomCell) {
    bottomCell.alpha = bottomCellOpacity;
}  

和:

for (UITableViewCell *cell in self.tableView.visibleCells) {
    if (cell == topCell) {
        cell.alpha = topCellOpacity;
    } else if (cell == bottomCell) {
        cell.alpha = bottomCellOpacity;
    } else {
        cell.alpha = 1.0;
    }
}

顺便说一句,达到类似效果的另一种方法是将渐变蒙版应用于整个表视图并退出该scrollViewDidScroll方法。这里唯一的技巧是您不能将渐变蒙版本身应用于表格视图(否则渐变将随表格视图滚动),而是将表格视图放入某个容器中UIView,然后将其应用于该容器

- (void)viewDidAppear:(BOOL)animated
{
    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = self.containerView.bounds;
    gradient.colors = @[(id)[UIColor clearColor].CGColor,
                        (id)[UIColor whiteColor].CGColor,
                        (id)[UIColor whiteColor].CGColor,
                        (id)[UIColor clearColor].CGColor];
    gradient.locations = @[@0.0, @0.1, @0.9, @1.0];
    self.containerView.layer.mask = gradient;
}

公认这是稍有不同的效果,但有时是可取的。这仅取决于您要拍摄什么。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在单元格中编辑UITextView时,iOS 7中的UITableView无法滚动到正确的位置

来自分类Dev

根据UITableview单元格在拖动时的移动来启用和禁用UITableview滚动

来自分类Dev

当滚动时,ios uitableview淡出底部单元格和顶部单元格

来自分类Dev

TableView单元格在滚动时消失

来自分类Dev

无法滚动到datagridview中的单元格底部

来自分类Dev

iOS:滚动时,UITableView单元格更改选择状态

来自分类Dev

在顶部添加单元格时,使UITableView保持滚动位置

来自分类Dev

UITableView滚动到单元格刷新顶部

来自分类Dev

在UITableView中向下滚动时,单元格消失

来自分类Dev

UICollectionView和选定的单元格在滚动时丢失选择

来自分类Dev

滚动时Swift iOS TableView单元格项消失

来自分类Dev

滚动后在UITableView顶部的第一个可见单元格上色

来自分类Dev

更改任何单元格名称时,顶部单元格名称也会更改

来自分类Dev

在UISearchDisplayController中选择单元格后滚动到UITableView中的选定单元格?

来自分类Dev

基于UITableview单元格在拖动时的移动来启用和禁用UITableview滚动

来自分类Dev

滚动时的uitableview单元格背景色问题

来自分类Dev

UITableView在滚动,添加或删除单元格时崩溃

来自分类Dev

滚动完成时居中单元格UITableView

来自分类Dev

UITableView滚动时滞后,每个单元格包含4个UIButton和4个UILable

来自分类Dev

滚动UITableView以显示选定的单元格

来自分类Dev

滚动uitableview时重复的单元格

来自分类Dev

展开Segue,在添加单元格后滚动到UITableView的底部

来自分类Dev

滚动时,UITableView单元格为空白

来自分类Dev

当我在iOS中滚动UITableView时cellForRowAtIndexPath无法正确显示单元格

来自分类Dev

UITableView单元格在滚动时损坏

来自分类Dev

UITableView单元格图像在滚动时保持切换单元格的状态

来自分类Dev

单击onclick单元格时滚动到顶部

来自分类Dev

当单元格高度改变时 UITableView 改变滚动位置

来自分类Dev

动态填充表格单元格时如何在表格单元格的底部定位 div

Related 相关文章

  1. 1

    在单元格中编辑UITextView时,iOS 7中的UITableView无法滚动到正确的位置

  2. 2

    根据UITableview单元格在拖动时的移动来启用和禁用UITableview滚动

  3. 3

    当滚动时,ios uitableview淡出底部单元格和顶部单元格

  4. 4

    TableView单元格在滚动时消失

  5. 5

    无法滚动到datagridview中的单元格底部

  6. 6

    iOS:滚动时,UITableView单元格更改选择状态

  7. 7

    在顶部添加单元格时,使UITableView保持滚动位置

  8. 8

    UITableView滚动到单元格刷新顶部

  9. 9

    在UITableView中向下滚动时,单元格消失

  10. 10

    UICollectionView和选定的单元格在滚动时丢失选择

  11. 11

    滚动时Swift iOS TableView单元格项消失

  12. 12

    滚动后在UITableView顶部的第一个可见单元格上色

  13. 13

    更改任何单元格名称时,顶部单元格名称也会更改

  14. 14

    在UISearchDisplayController中选择单元格后滚动到UITableView中的选定单元格?

  15. 15

    基于UITableview单元格在拖动时的移动来启用和禁用UITableview滚动

  16. 16

    滚动时的uitableview单元格背景色问题

  17. 17

    UITableView在滚动,添加或删除单元格时崩溃

  18. 18

    滚动完成时居中单元格UITableView

  19. 19

    UITableView滚动时滞后,每个单元格包含4个UIButton和4个UILable

  20. 20

    滚动UITableView以显示选定的单元格

  21. 21

    滚动uitableview时重复的单元格

  22. 22

    展开Segue,在添加单元格后滚动到UITableView的底部

  23. 23

    滚动时,UITableView单元格为空白

  24. 24

    当我在iOS中滚动UITableView时cellForRowAtIndexPath无法正确显示单元格

  25. 25

    UITableView单元格在滚动时损坏

  26. 26

    UITableView单元格图像在滚动时保持切换单元格的状态

  27. 27

    单击onclick单元格时滚动到顶部

  28. 28

    当单元格高度改变时 UITableView 改变滚动位置

  29. 29

    动态填充表格单元格时如何在表格单元格的底部定位 div

热门标签

归档