Простой способ отобразить границы CGRect?

#ios #cocos2d-iphone #cgrect

#iOS #cocos2d-iphone #cgrect

Вопрос:

Я пытаюсь найти способ отображения границ некоторых CGRect файлов в моей программе iOS для целей отладки. Есть ли довольно простой способ сделать это? Мне просто нужно посмотреть, где программа создает эти прямоугольники, чтобы я мог отследить некоторые странные действия при касании (или их отсутствие).

Мой метод класса init :

 // Initialize with points and a line number, then draw a rectangle 
// in the shape of the line
-(id)initWithPoint:(CGPoint)sP :(int)w :(int)h :(int)lN :(int)t {
    if ((self = [super init])) {
        startP = sP;
        lineNum = lN;
        width = w;
        height = h;
        int type = t;
        self.gameObjectType = kPathType;

        // Draw the path sprite
        path = [CCSprite spriteWithFile: @"line.png" rect:CGRectMake(0, 0, 5, height)];
        ccTexParams params = {GL_LINEAR,GL_LINEAR,GL_REPEAT,GL_REPEAT};
        [path.texture setTexParameters:amp;params];

        if(type == 1) {
            path.position = ccp(startP.x, startP.y);
        } else {
            path.rotation = 90;
            path.anchorPoint = ccp(0, 0);
            path.position = ccp(startP.x, startP.y-2);
        }

        [self addChild:path];

        // Draw the "bounding" box
        pathBox = CGRectMake(path.position.x - (path.contentSize.width/2), path.position.y - (path.contentSize.height/2), path.contentSize.width * 10, path.contentSize.height);
    }
    return self;
}
  

pathBox идет ли речь о rect.

Комментарии:

1. Это не вопрос objective-c

Ответ №1:

Это можно обработать в drawRect:

 - (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGRect aRect=[myPath bounds];
    CGContextSetLineWidth(context, 2);
    CGContextSetStrokeColorWithColor(context, [UIColor blueColor ].CGColor);
    CGContextStrokeRect(context, aRect);
}
  

Ответ №2:

Я собираюсь попробовать и предположить, что это проект iOS, поскольку это то, что я знаю.

Если эти прямоугольники используются для UIView или CALayer, вы можете установить границы для них.

Добавьте #import <QuartzCore/QuartzCore.h> в свой файл и используйте view.layer.borderColor , view.layer.borderWidth добавьте то, что вы хотите.

Если это просто слой, удалите view его часть.

Комментарии:

1. Извините, я должен был указать, что это iOS, использующая Cocos2d

Ответ №3:

Я более или менее разобрался, как это сделать: просто расширил метод draw в моем классе вот так:

 -(void) draw {
    glColor4f(0, 1.0, 0, 1.0);
    glLineWidth(2.0f);
    [super draw];

    CGRect pathBox = CGRectMake(path.position.x - (path.contentSize.width/2), path.position.y - (path.contentSize.height/2), path.contentSize.width * 10, path.contentSize.height);
    CGPoint verts[4] = {
      ccp(pathBox.origin.x, pathBox.origin.y),
      ccp(pathBox.origin.x   pathBox.size.width, pathBox.origin.y),
      ccp(pathBox.origin.x   pathBox.size.width, pathBox.origin.y   pathBox.size.height),
      ccp(pathBox.origin.x, pathBox.origin.y   pathBox.size.height)
    };

    ccDrawPoly(verts, 4, YES);
}
  

Спасибо Blue Ether на сайте Cocos2D за предупреждение:
http://www.cocos2d-iphone.org/forum/topic/21718?replies=5#post-120691

Ответ №4:

Вы можете попробовать что-то простое, подобное этому методу здесь. При этом используется фактическая структура CGRect в отличие от UIView и CLayer.

 -(void) drawBorderForRect:(CGRect)rect usingColor:(UIColor*)uiColor{

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetStrokeColorWithColor(context, uiColor.CGColor);
    CGContextSetLineWidth(context, 1.0f);

    CGFloat x = rect.origin.x;
    CGFloat y = rect.origin.y;
    CGFloat width = abs(rect.size.width);
    CGFloat height = abs(rect.size.height);

    // ---
    CGContextMoveToPoint(context, x, y);
    CGContextAddLineToPoint(context, x   width, y);

    // |
    CGContextMoveToPoint(context, x   width, y);
    CGContextAddLineToPoint(context, x    width, y - height);

    // ---
    CGContextMoveToPoint(context, x    width, y - height);
    CGContextAddLineToPoint(context, x - width, y - height);

    // |
    CGContextMoveToPoint(context, x, y - height);
    CGContextAddLineToPoint(context, x, y);

    CGContextStrokePath(context);
}
  

Ответ №5:

В swift это просто. Вы можете создать BezierPath из CGRect:

 let dp = UIBezierPath.init(rect: myRect)
dp.stroke()