Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios LayoutAttributesForelementsRect:方法问题,如何使集合视图中的项目从中心淡出?_Ios_Xcode_Ios7_Collectionview - Fatal编程技术网

Ios LayoutAttributesForelementsRect:方法问题,如何使集合视图中的项目从中心淡出?

Ios LayoutAttributesForelementsRect:方法问题,如何使集合视图中的项目从中心淡出?,ios,xcode,ios7,collectionview,Ios,Xcode,Ios7,Collectionview,我有一个带有项目的UICollectionView。我希望中间的项目是全彩的,靠近集合视图垂直边界的项目慢慢褪色。 我提出了我的layouttributesforementsinrect的自定义实现,但它似乎没有按预期工作 首先,它很少被调用。一次是在启动时,有时是以后,通常是在我接近collectionViewend时。 其次,我没有得到标准化的距离,它从-2到6,我只想要0到1 我到底有什么地方不及格?我取可见矩形并计算从单元中心到其边缘的距离,然后对其进行规格化 - (NSArray *)

我有一个带有项目的
UICollectionView
。我希望中间的项目是全彩的,靠近集合视图垂直边界的项目慢慢褪色。 我提出了我的
layouttributesforementsinrect
的自定义实现,但它似乎没有按预期工作

首先,它很少被调用。一次是在启动时,有时是以后,通常是在我接近
collectionView
end时。 其次,我没有得到标准化的距离,它从-2到6,我只想要0到1

我到底有什么地方不及格?我取可见矩形并计算从单元中心到其边缘的距离,然后对其进行规格化

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
    NSArray *attribs = [super layoutAttributesForElementsInRect:rect];

    CGRect visibleRect;
    visibleRect.origin = self.collectionView.contentOffset;
    visibleRect.size = self.collectionView.bounds.size;

    for (UICollectionViewLayoutAttributes *attributes in attribs) {
        if (CGRectIntersectsRect(attributes.frame, rect)) {

            CGFloat distanceFromCenter = CGRectGetMidY(visibleRect) - attributes.center.y;
            CGFloat normalizedDistance = distanceFromCenter / (visibleRect.size.height / 2);
            attributes.alpha = 1 - normalizedDistance;
        }
    }

    return attribs;
}
更新:

以下是我想要的:

当日期的顶行(22-28)接近集合视图的边缘时,我希望它们慢慢淡出。最后一排也是如此。如您所见,日期1和日期2已经不可见,因为它们是浅灰色的。日期1-31为黑色,因为我突出显示了现在占据大多数视图的月份

现在,我通过每次滚动后的滚动视图委托方法执行此操作,但这是一段非常难看的代码。

我想在布局属性方法中也这样做。

恐怕我认为您在这方面不会有太多运气。我认为
layoutatributesforelementsinrect
很少被调用,因为就collectionView而言,它的“内容视图”没有改变——只有contentOffset。scrollView代理代码应该能够识别偏移量何时发生变化,因此(大概)可以强制重新加载相关单元格以获得正确的alpha


关于规范化代码,我想传递给该方法的Rect必须比collectionView的边界大得多-您是否尝试通过日志记录来准确确定传递的Rect?或者super是懒惰的,并且为所有内容传递属性,不管它们是否在该矩形中。您的
CGRectIntersectsRect
应该能够捕捉到这一点,但这也可能包括边缘位于Rect内但中心位于Rect外的单元格。为了处理负值,你应该使用
fabs
来获得距离中心的绝对值。

恐怕你不会有太多的运气。我认为
layoutatributesforelementsinrect
很少被调用,因为就collectionView而言,它的“内容视图”没有改变——只有contentOffset。scrollView代理代码应该能够识别偏移量何时发生变化,因此(大概)可以强制重新加载相关单元格以获得正确的alpha


关于规范化代码,我想传递给该方法的Rect必须比collectionView的边界大得多-您是否尝试通过日志记录来准确确定传递的Rect?或者super是懒惰的,并且为所有内容传递属性,不管它们是否在该矩形中。您的
CGRectIntersectsRect
应该能够捕捉到这一点,但这也可能包括边缘位于Rect内但中心位于Rect外的单元格。为了处理负值,你应该使用
fabs
来获得距离中心的绝对值。

恐怕你不会有太多的运气。我认为
layoutatributesforelementsinrect
很少被调用,因为就collectionView而言,它的“内容视图”没有改变——只有contentOffset。scrollView代理代码应该能够识别偏移量何时发生变化,因此(大概)可以强制重新加载相关单元格以获得正确的alpha


关于规范化代码,我想传递给该方法的Rect必须比collectionView的边界大得多-您是否尝试通过日志记录来准确确定传递的Rect?或者super是懒惰的,并且为所有内容传递属性,不管它们是否在该矩形中。您的
CGRectIntersectsRect
应该能够捕捉到这一点,但这也可能包括边缘位于Rect内但中心位于Rect外的单元格。为了处理负值,你应该使用
fabs
来获得距离中心的绝对值。

恐怕你不会有太多的运气。我认为
layoutatributesforelementsinrect
很少被调用,因为就collectionView而言,它的“内容视图”没有改变——只有contentOffset。scrollView代理代码应该能够识别偏移量何时发生变化,因此(大概)可以强制重新加载相关单元格以获得正确的alpha

关于规范化代码,我想传递给该方法的Rect必须比collectionView的边界大得多-您是否尝试通过日志记录来准确确定传递的Rect?或者super是懒惰的,并且为所有内容传递属性,不管它们是否在该矩形中。您的
CGRectIntersectsRect
应该能够捕捉到这一点,但这也可能包括边缘位于Rect内但中心位于Rect外的单元格。为了处理负值,您应该使用
fabs
获得距离中心的绝对值