2014-12-03 68 views
1

我想繪製一個帶邊框的彩色矩形,如果它被選中,但我似乎無法得到邊界繪製。彩色矩形顯示在正確的位置和顏色上,但邊框從不出現。我試圖縮小比例尺來查看它是否以某種方式在視圖的外部裁剪,但那也不起作用。CGContextStrokeRect沒有出現在視圖中

我環顧了一下StackOverflow,但似乎沒有任何與此相關的問題(唯一的候選人是this one,但它涉及圖像,所以我不認爲它可以幫助我)。

  • _card是保存有關使用該卡的一些信息來確定如何繪製
  • 我知道在代碼if語句是一個屬性:

    下面的代碼的幾點說明執行,因爲NSLog的出現在控制檯

這裏是我講的觀點我的drawRect方法(在_card.isSelected的代碼,如果語句是什麼,我相信應該產生的邊界):

- (void)drawRect:(CGRect)rect { 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    if ([_card isKindOfClass:[NSNumber class]] && [_card intValue] == -1) { 
     NSLog(@"No card"); 
    } else if ([_card isKindOfClass:[Card class]]) { 
     Card *card = _card; 

     if (card.shouldAnimate) { 
      [self fadeSelfIn]; 
     } 

     if ([_card isKindOfClass:[WeaponCard class]]) { 
      CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor); 
     } else if ([_card isKindOfClass:[ArmorCard class]]) { 
      CGContextSetFillColorWithColor(context, [UIColor greenColor].CGColor); 
     } 

     if (card.isSelected) 
      CGContextSetStrokeColorWithColor(context, [UIColor purpleColor].CGColor); 
      CGContextStrokeRect(context, self.bounds); 
      NSLog(@"Drawing border on selected card with bounds %@, NSStringFromCGRect(self.bounds)); 
     } 

     CGContextFillRect(context, self.bounds); 
    } 

} 

回答

2

您對CGContextFillRect通話繪製在你的行程線路。先填寫,然後行程:

CGContextFillRect(context, self.bounds); 

if (card.isSelected) { 
    CGContextSetStrokeColorWithColor(context, [UIColor purpleColor].CGColor); 

    // As rob mayoff points out in the comments, it's probably a good idea to inset 
    // the stroke rect by half a point so the stroke is not getting cut off by 
    // the view's border, which is why you see CGRectInset being used here. 
    CGContextStrokeRect(context, CGRectInset(self.bounds, 0.5, 0.5)); 
} 
+0

你可能也想你的插圖界矩形:'CGContextStrokeRect(背景下,CGRectInset(self.bounds,0.5,0.5));'。 – 2014-12-03 19:48:00

+0

如果我不插入矩形,邊框是否會被剪切到視圖之外? – hhanesand 2014-12-03 19:51:35

+0

是的,筆劃線的中間將位於視圖的邊界上,使線在視圖的一半內,半在外(由於它在視圖的範圍之外,因此不會被繪製)。將它插入半個點可能是一個好主意。 – TylerTheCompiler 2014-12-03 20:00:11