UICollectionView 加字母索引

github源码地址

UICollectionView 加字母索引_第1张图片
索引.gif

UICollectionView 加字母索引_第2张图片
索引2.gif

索引条部分使用UIView 的 layoutSubviews绘制字母和边框线

setNeedsDisplay会调用自动调用drawRect方法,这样可以拿到UIGraphicsGetCurrentContext,就可以画画了。而setNeedsLayout会默认调用layoutSubViews,就可以处理子视图中的一些数据。
宗上所诉,setNeedsDisplay方便绘图,而layoutSubViews方便出来数据。

因为这两个方法都是异步执行的,所以一些元素还是直接绘制的好

使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形,在这里使用CAShapeLayer绘制索引表的边框线


根据手势来判断显示中间的索引块
//开始触摸
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{}

//手势移动
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent*)event{}

//手势结束
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{}

根据触摸事件的触摸点位置来算出点击的是第几个section

-(void)sendEventToDelegate:(UIEvent*)event{
    UITouch *touch = [[event allTouches] anyObject];       
    CGPoint point = [touch locationInView:self];
    NSInteger indx = ((NSInteger) floorf(point.y) / _letterHeight);    
    if (indx< 0 || indx > self.titleIndexes.count - 1) {
        return;
    }
    [self.collectionDelegate collectionViewIndex:self didselectionAtIndex:indx withTitle:self.titleIndexes[indx]];
}

你可能感兴趣的:(UICollectionView 加字母索引)