CGContextAddEllipseInRect不绘制任何内容

时间:2012-11-05 12:57:38

标签: objective-c

我正在尝试绘制一个带有数字的圆圈:

   -(void)drawRect:(CGRect)rect {
    //Drawing code
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 4.0);
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
    CGContextBeginPath(context);
    CGContextAddEllipseInRect(context, rect);
    CGContextDrawPath(context, kCGPathFillStroke);

    // Label and index code
    UILabel* circleLabel = [[UILabel alloc] init];
    NSString *i=[Index stringValue];
    [circleLabel setText:i];
    [self addSubview:circleLabel];




}

我从我自己的方法调用drawRect方法:

-(void)addPhotoIndex:(NSNumber*)tempNumber withCoordinate:(NSString*)currentTouchPos{
    self.coord= CGPointFromString(currentTouchPos);
    CGRect rect= CGRectMake ((coord.x - 5), (coord.y- 5), 5, 5);
    NSNumber *Index= tempNumber;
    [self drawRect:rect];




}

它本身是从ViewController调用的。

但这并不是什么都没有,也没有任何错误。有人可以帮帮我吗?

解决方案:

最后,这就是它的工作原理:

  -(void)addPhotoIndex:(NSNumber*)tempNumber withCoordinate:(NSString*)currentTouchPos{

    self.coord= CGPointFromString(currentTouchPos);
    CGRect rect= CGRectMake ((coord.x - 3), (coord.y- 3), 3, 3);
    NSNumber *Index= tempNumber;
    NSString *i=[Index stringValue];
    UIFont *font = [UIFont systemFontOfSize:15.0];

    // Drawing Point
    UIGraphicsBeginImageContext(self.frame.size);
    [self.image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 3.0);
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
    CGContextBeginPath(context);
    CGContextAddEllipseInRect(context, rect);
    CGContextDrawPath(context, kCGPathFillStroke);
    [ i drawAtPoint:self.coord withFont:font];
    self.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();


}

索引编号的点在正确的位置彼此相邻绘制:)感谢您的有用帮助!

2 个答案:

答案 0 :(得分:4)

您应该使用的方法是drawRect:而不是drawInRect:

您也不需要创建自己的上下文,因为这是在drawRect:

中为您设置的
- (void)drawRect:(CGRect)rect;
{
  // UIGraphicsBeginImageContext(self.bounds.size); <-- not needed
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextSetLineWidth(context, 4.0);
  CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
  CGContextBeginPath(context);
  CGContextAddEllipseInRect(context, rect);
  CGContextDrawPath(context, kCGPathFillStroke); // Or kCGPathFill

  /*
   * As @Jonathan Cichon points out you should not add subview's here
   * either add them elsewhere or draw the string manually
   */
  // UILabel* circleLabel = [[UILabel alloc] init];
  // NSString *i=[Index stringValue];
  // [circleLabel setText:i];
  // [self addSubview:circleLabel];
  // UIGraphicsEndImageContext(); <-- not needed
}

答案 1 :(得分:1)

我假设您在- (void)drawInRect:(CGRect)rect的子类中实现了UIView。如果是这样,请使用- (void)drawRect:(CGRect)rect,因此在调用方法时已经分配了绘图的上下文。删除UIGraphicsBeginImageContextUIGraphicsEndImageContext来电。另外,您不应在drawRect中添加子视图,而是使用[i drawInRect:withFont:]