2013-09-17 1 views
7

Подкласс UIView (ThumbView) находится внутри UICollectionViewCell. Следующий код прекрасно работает в прошивке 7 имитатора:Почему пользовательский drawRect не показан в 6.1-симуляторе?

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *identifier = @"Cell"; 
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; 
    ThumbView *thumbView = (ThumbView *)[cell viewWithTag:1]; 
    [thumbView setNeedsDisplay]; 
    return cell; 
} 

enter image description here

Однако в версии IOS 6 тренажера:

Сетки все ушли:

enter image description here

Я поставил NSLog в drawRect ThumbView, чтобы убедиться, чтоВызывается.

Что не так?

  • Xcode версии 5.0 (5A1412)
  • IOS Simulator Version 7,0 (463.9.4)

UPDATE (код рисунок):

- (void)drawRect:(CGRect)rect 
{ 
    NSLog(@"%s", __func__); 
    [self drawGrid:rect]; 
} 

- (void)drawGrid:(CGRect)rect 
{ 
    CGFloat margin = self.margin; 
    CGFloat lineWidth = 2.0; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGRect gridRect = CGRectInset(rect, margin, margin); 

    for (NSInteger i = 1; i < 9; i++) { 
     CGFloat h = gridRect.size.height/9; 
     CGFloat y = i * h; 
     CGContextMoveToPoint(context, margin, y+margin); 
     CGContextAddLineToPoint(context, gridRect.size.width+margin, y+margin); 
     CGContextSetLineWidth(context, lineWidth/4.0); 
     if (i == 3 || i == 6) { 
      CGContextSetStrokeColorWithColor(context, UIColor.darkGrayColor.CGColor); 
     } else { 
      CGContextSetStrokeColorWithColor(context, UIColor.lightGrayColor.CGColor); 
     } 
     CGContextStrokePath(context); 
    } 

    for (NSInteger i = 1; i < 9; i++) { 
     CGFloat w = gridRect.size.width/9; 
     CGFloat x = i * w; 
     CGContextMoveToPoint(context, x+margin, margin); 
     CGContextAddLineToPoint(context, x+margin, gridRect.size.height+margin); 
     CGContextSetLineWidth(context, lineWidth/4.0); 
     if (i == 3 || i == 6) { 
      CGContextSetStrokeColorWithColor(context, UIColor.darkGrayColor.CGColor); 
     } else { 
      CGContextSetStrokeColorWithColor(context, UIColor.lightGrayColor.CGColor); 
     } 
     CGContextStrokePath(context); 
    } 

    CGFloat frameWidth = lineWidth * 2.0; 
    CGRect frameRect = CGRectInset(rect, 0.0, 0.0); 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) frameWidth = lineWidth * 2.0; 
    CGContextSetLineWidth(context, frameWidth); 
    CGContextSetStrokeColorWithColor(context, UIColor.darkGrayColor.CGColor); 
    CGContextStrokeRect(context, frameRect); 
} 
+0

Есть ли опечатка в вашем вопросе, потому что имя метода - 'drawRect:'? – Amar

+1

опечатка только в вопросе, исправлен. Благодарю. – ohho

+0

Несмотря на то, что релиз iOS 7 находится за углом, он все еще находится под NDA, поэтому до этого момента вы вряд ли получите хороший ответ. – borrrden

ответ

1

Вы проверили, что вы» Не рисовать белые линии на белом фоне в iOS6? (если вы используете tintColor в iOS7, например ...)

2

Без просмотра кода трудно сказать. Я видел такие вещи, когда я запускаю код на сетчатке против симулятора не-сетчатки и неправильно учитываю разницу в масштабах.

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