2011-10-11 76 views
2

我試圖找到一種方法來顯示我的iOS程序中某些CGRect的邊框以進行調試。有沒有一個相當簡單的方法來做到這一點?我只需要看看程序創建這些矩形的位置,這樣我就可以追蹤到一些奇怪的觸摸行爲(或者缺乏)。顯示CGRect邊框的簡單方法?

我班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:&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是有問題的矩形。

+0

這不是一個Objective-C的問題 – Nektarios

回答

2

我想通了,更多或更少如何做到這一點:剛剛擴展,像這樣在我班上的繪製方法:

-(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); 
} 

由於藍甲醚在在cocos2d的網站擡頭: http://www.cocos2d-iphone.org/forum/topic/21718?replies=5#post-120691

2

我將採取刺,並認爲這是一個iOS項目,因爲這就是我所知道的。

如果這些矩形用於UIView或CALayer,那麼您可以爲它們設置邊框。

在您的文件中添加#import <QuartzCore/QuartzCore.h>並使用view.layer.borderColor,view.layer.borderWidth添加你想要的。

如果只是一層刪除了view的一部分。

+0

對不起,我應該已經指定,它是使用了cocos2d的iOS –

5

這可以內的drawRect處理:

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

你可以嘗試一些簡單的像這裏這個方法。這使用一個實際的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); 
} 
0

在swift中,這很容易。您可以從一個的CGRect構造BezierPath:

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