简单的方法来显示CGRect的边界?

我试图find一种方法来显示我的iOS程序中的一些CGRect的边界用于debugging目的。 有一个相当简单的方法来做到这一点? 我只需要看看程序在哪里创build这些矩形,这样我就可以追踪到一些奇怪的触摸行为(或缺乏)。

我的类的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是有问题的矩形。

这可以在drawRect中处理:

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

我会采取一个刺,并认为这是一个iOS项目,因为这就是我所知道的。

如果这些矩形用于UIView或CALayer,那么您可以为它们设置边框。

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

如果只是一个图层,删除它的view部分。

我想出了或多或less的做法:只要在我的class级中扩展绘制方法就像这样:

 -(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

你可以在这里尝试一些简单的方法。 这使用一个实际的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); } 

迅速,这很容易。 你可以从CGRect构造一个BezierPath:

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