2014-02-11 69 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:方法再次被觸發。