我正在尝试找到一种方法来显示iOS程序中某些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:¶ms];
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 :(得分:5)
这可以在drawRect:
中处理- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect aRect=[myPath bounds];
CGContextSetLineWidth(context, 2);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor ].CGColor);
CGContextStrokeRect(context, aRect);
}
答案 1 :(得分:2)
我要采取刺,并假设这是一个iOS项目,因为这是我所知道的。
如果这些矩形用于UIView或CALayer,那么您可以为它们设置边框。
在您的文件中添加#import <QuartzCore/QuartzCore.h>
并使用view.layer.borderColor
,view.layer.borderWidth
添加您想要的内容。
如果它只是一个图层,则删除它的view
部分。
答案 2 :(得分:2)
我想出了或多或少如何做到这一点:只是在我的课程中扩展了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
答案 3 :(得分: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);
}
答案 4 :(得分:0)
在迅捷中,这很容易。您可以从CGRect构建BezierPath:
//// producer t==0
buf->data[t] = t; //// buf->data[t] == 0
//consumer
for(int t=0; t<N_THREADS; t++) // first iteration, t==0
if (buf->data[t]) { //// buf->data[t] == 0, branch not taken
used += 1;
...
//// used remains ==0 -----> assert fails