У меня есть подкласс UIView под названием MENode
. Каждый MENode
имеет NSMutableDictionary, который отслеживает свои подносы (также MENode
). То, что я пытаюсь достичь, - это рисовать линию от родительского узла до дочернего узла. Это моя реализация drawRect:
в MENode
:Как подключить два UIViews с линией?
- (void)drawRect:(CGRect)rect{
//connect the sub node to its super node by drawing a line between the two;
for (int i=0; i<self.subNodes.count; i++) {
//get one of the child nodes
MENode *subNode = [self.subNodes objectAtIndex:i];
//get the context and set up color and line width
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
CGContextSetLineWidth(context, 5);
//set up a line between the parent node and the child node
CGContextMoveToPoint(context, self.center.x, self.center.y);
CGContextAddLineToPoint(context, subNode.center.x, subNode.center.y);
//draw it.
CGContextStrokePath(context);
}
}
Оба из указанных ниже способов называющихся View Controller. Я называю [self setNeedsDisplay];
в обоих:
-(void)addNode:(MENode *)newNode{
//set the child node's parent node to self (a weak reference)
newNode.parentNode = self;
//add the node to self.subNodes
[self.subNodes addObject:newNode];
//add the node to the parent node
[self addSubview:newNode];
//call seeNeedsDisplay
[newNode setNeedsDisplay];
}
-(void)nodeAdditionsDone{
//call setNeedsDisplay
[self setNeedsDisplay];
//do some logic with this later
self.nodeAddtionsAreFinished = YES;
}
Когда я запускаю это я не получаю никаких линий, только узлы. Заранее спасибо за вашу помощь.
Спасибо за ваш ответ. Я решил использовать CALayer вместо CGContext для линии из-за преимуществ производительности. Я попытался использовать точки останова для отслеживания 'self.subNodes', но они говорят, что все нуль ... не хороший день для моего компилятора. Я проверил его с NSLog, хотя и работал. – 68cherries