2014-02-11 3 views
1

Мне нужно нарисовать круг в некотором UICollectionViewCell. Кругом с разным цветным цветом и цветом фона. Мой код.UICollectionViewCell drawRect: выпуски

UICollectionViewController

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 

    CalendarCell *cell; 

    firstDayInMonth = [self dayWeekStart:[self getDateFromItem:dateFromStart section:indexPath.section row:1]]; 

    if (indexPath.row < firstDayInMonth) { 
     cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellCalendarEmpty" forIndexPath:indexPath]; 
    } else { 
     cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellCalendar" forIndexPath:indexPath]; 

    if ([self compareOnlyDate:[self getDateFromItem:dateFromStart section:indexPath.section row:indexPath.item-firstDayInMonth] date2:[self getDateLocaleTimeZone:[NSDate date]]] == 1) { 

     cell.bgColor = [UIColor blueColor]; 
     cell.titleLabel.textColor = [UIColor whiteColor]; 
     cell.drawCircle = [NSNumber numberWithInt:1]; 
     toDaySection = indexPath.section; 

    } else { 

     cell.bgColor = [UIColor whiteColor]; 
     cell.drawCircle = [NSNumber numberWithInt:0]; 
     cell.titleLabel.textColor = [UIColor lightGrayColor]; 
    } 

    cell.titleLabel.text = [NSString stringWithFormat:@"%i", indexPath.row-firstDayInMonth+1]; 

} 

return cell; 
} 

UICollectionViewCell

- (void)drawRect:(CGRect)rect 
{ 

    if ([self.drawCircle integerValue] == 1) { 

     [self drawCircl:0.0 end:0.5 color:[UIColor blueColor] bgColor:self.bgColor]; 
     [self drawCircl:0.5 end:1.0 color:[UIColor redColor] bgColor:self.bgColor]; 

    } 
} 

- (void) drawCircl:(float)start end:(float)end color:(UIColor*)color bgColor:(UIColor*)bgColor{ 

    context = UIGraphicsGetCurrentContext(); 

    CGContextSetLineWidth(context, 0.8); 

    CGFloat startAngle = start * 2 * M_PI - M_PI/2; 
    CGFloat endAngle = end * 2 * M_PI - M_PI/2; 

    CGContextAddArc(context, 15, 15, 14, startAngle, endAngle, NO); 

    CGContextSetFillColorWithColor(context, bgColor.CGColor); 
    CGContextSetStrokeColorWithColor(context, color.CGColor); 
    CGContextDrawPath(context, kCGPathFillStroke); 

} 

При прокрутке, круг обращается на различных клетках. cell.titleLabel всегда отображается правильно. Почему круг в клетках, где их не должно быть?

ответ

3

Причина, по которой cell.titleLabel всегда отображается правильно, но пользовательский чертеж не является, потому что вы обновляете cell.titleLabel каждый раз, но так, как вы настраиваете пользовательскую настройку чертежа, он будет влиять только на созданные ячейки.

Это связано с тем, что в нормальных условиях drawRect: обычно запускается, когда представление сначала добавляется на экран и становится видимым. Вы повторно используете ячейки, тем самым заставляя рисунок оставаться на представлениях, даже когда они используются где-то еще.

После того, как вы изменили значение cell.drawCircle, необходимо добавить [cell setNeedsDisplay]. Это вызовет повторный запуск метода drawRect:.

Смежные вопросы