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