Ich versuche, ein Array von CGRect zu speichern, um es mit CGContextFillRects zu verwenden, aber die CGRect-Variablen, die ich meinem MinorPlotLines-Array zuweise, scheinen nicht gespeichert zu werden. Zu der Zeit, wenn das Objekt sich selbst zeichnet, ist minorPlotLines leer! Weiß jemand was los ist?CGContextFillRects: CGRect * funktioniert nicht. Zugewiesene CGRect-Elemente werden nicht gespeichert
@interface GraphLineView() {
int numberOfLines;
CGRect *minorPlotLines;
}
@end
@implementation GraphLineView
- (instancetype) initWithFrame: (CGRect) frame {
self = [super initWithFrame:frame];
if (self) {
// Init code
[self setupView];
}
return self;
}
- (instancetype) initWithCoder: (NSCoder *) aDecoder {
if(self == [super initWithCoder:aDecoder]){
[self setupView];
}
return self;
}
- (void) dealloc {
free(minorPlotLines);
}
- (void) setupView {
numberOfLines = 40;
minorPlotLines = malloc(sizeof(struct CGRect)*40);
for(int x = 0; x < numberOfLines; x += 2){
//minorPlotLines[x] = *(CGRect*)malloc(sizeof(CGRect));
minorPlotLines[x] = CGRectMake(x*(self.frame.size.width/numberOfLines), 0, 2, self.frame.size.height);
// minorPlotLines[x+1] = *(CGRect*)malloc(sizeof(CGRect));
minorPlotLines[x+1] = CGRectMake(0, x*(self.frame.size.height/numberOfLines), self.frame.size.width, 2);
}
[self setNeedsDisplay];
}
- (void) drawRect:(CGRect)rect {
// Drawing code
[super drawRect:rect];
for(int x = 0; x < numberOfLines; x += 2){
NSLog(@"R %d = %f", x, minorPlotLines[x].origin.x);
NSLog(@"R %d = %f", x+1, minorPlotLines[x+1].origin.y);
}
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [[UIColor yellowColor] CGColor]);
CGContextFillRects(context, minorPlotLines, numberOfLines);
}
Ok sicher. Aber CGContextFillRects fragt spezifisch nach CGRect *. Was soll ich machen? –
Ich habe versucht, Ihren Code (um den Inhalt von 'minorPlotLines' zu konstruieren und später den Inhalt wieder heraus zu lesen) in ein anderes Projekt kopiert, und es scheint den Inhalt gut zu erhalten, so dass Ihr grundlegender Code selbst vernünftig erscheint. Haben Sie überprüft, um sicherzustellen, dass Sie tatsächlich einen Nicht-Null-Rahmen zum Zeitpunkt der Konstruktion haben (d. H. In "-setupView")? Mit anderen Worten, bist du sicher, dass 'minorPlotLines' tatsächlich ** leer ist ** oder ist es mit einem Array von' CGRectZero's gefüllt? – fullofsquirrels
Sie haben Recht. Ich wünschte, du hättest eine Antwort geschrieben, damit ich dir Internet-Punkte geben kann. Vielen Dank. Eine Frage: Wenn ich ein Diagrammraster mit CGContextFillRects zeichnen möchte, ist CGContextFillRects effizienter als CGContextAddLineToPoint? Sind Rechtecke besser als Linien? Meine Umrandungslinien sind etwa 2 Pixel dick und aktualisieren ihre Position mit 60 fps. –