2016-06-28 13 views
0

So habe ich folgenden Code, der für das Zeichnen der Boxen mit Take-Eingabe vom Benutzer von PanelWidth und Panelheight verantwortlich ist, die pro Box ist und es mit zwei Farben zeichnet. Ich möchte in der Lage sein, Zähler wie in Zeilen 1,2,3,4,5,6 sowie Spalten A1, B1, C1 zu drucken. Wie kann ich erreichen, dass dies für OS X App geschrieben wird in Objective Cmöchten Counter auf Boxen drucken, wie viele Boxen das Programm druckt. für OS X ObjectiveC

das ist, was dieser Code prints now das ist, was ich es will print

//screen drawing 

for (int r=0; r < 2*row; r++) { 
    long int positionVer = (panelHeight*r); 

    for (int i=0; i < 2*col; i++) { 
     long int positionHor = (panelWidth*i); 

     NSRect col1= NSMakeRect(positionHor,positionVer, panelWidth, panelHeight); 

     if (_bgEnable) { 
      if((r+i) %2) 
      { 
       [rectColor2 set]; 
      } 
      else { 
       [rectColor set]; 
      } 

     } 


     else{ 
      [[NSColor colorWithCalibratedWhite:0.0 alpha:0.0] setFill]; 
      NSRectFillUsingOperation(col1, NSCompositeSourceAtop); 
     } 

     NSRectFill (col1); 

     if (_BoarderEnable) { 
     [boarderColor set]; 
     NSFrameRectWithWidth (col1, _boarderWidth); 
     } 
    } 
} 

Antwort

0

es gibt eine Reihe von Möglichkeiten, dies zu tun. Hier ist eins. Dies verwendet eine benutzerdefinierte Ansicht, um die Zeichnung auszuführen (es liegt an Ihnen, die Ansicht zu erstellen und die Werte zuzuweisen). Die Zeichnung ist von unten nach oben, damit die Nummerierung korrekt ist, müssen Sie mit den gesamten Zeilen beginnen und dann die aktuelle Zeile subtrahieren (und zur Benutzerfreundlichkeit 1 zur Spaltennummer hinzufügen). Da ASCII-Zeichen sequenziell sind, können Sie bei 65 (A) beginnen und von dort aus inkrementieren. Sie können auch die Textattribute aktualisieren und es dem Benutzer ermöglichen, weitere Anpassungen vorzunehmen. Ich bin mir sicher, dass es einige Optimierungen gibt, die gemacht werden könnten (oder ein besserer Weg dies alles zu tun), aber das sollte dich in Schwung bringen.

@interface BoxView : NSView 
@property (assign) NSInteger columnCount; 
@property (assign) NSInteger rowCount; 
@property (assign) CGFloat width; 
@property (assign) CGFloat height; 
@property (strong) NSColor *c0; 
@property (strong) NSColor *c1; 
@property (assign) BOOL drawBorder; 
@end 

@implementation BoxView 

- (void)drawRect:(NSRect)rect { 
    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: 
           [NSFont labelFontOfSize:12.0], NSFontAttributeName, 
           [NSColor whiteColor], NSForegroundColorAttributeName, 
           nil]; 
    CGFloat x = 0.0, y = 0.0; 
    BOOL useColor0 = YES; 
    for (NSInteger r = 0; r < self.rowCount; r++) { 
     for (NSInteger c = 0; c < self.columnCount; c++) { 
      NSRect box = NSMakeRect(x, y, self.width, self.height); 
      NSBezierPath *path = [NSBezierPath bezierPathWithRect:box]; 
      [(useColor0 ? self.c0 : self.c1) set]; 
      [path fill]; 
      if (self.drawBorder) { 
       [[NSColor blackColor] setStroke]; 
       [path stroke]; 
      } 
      NSString *arrow = nil; 
      if (r == 0) { 
       if (self.rowCount % 2) { 
        if (c == (self.columnCount - 1)) arrow = @"∅"; 
       } else if (c == 0) { 
        arrow = @"∅"; 
       } 
      } 
      if (!arrow) { 
       if ((self.rowCount - r) % 2) { 
        arrow = ((c == (self.columnCount - 1)) ? @"↓" : @"→"); 
       } else { 
        arrow = ((c == 0) ? @"↓" : @"←"); 
       } 
      } 
      NSString *label = [NSString stringWithFormat:@"%c%ld %@", (char)(65 + c), (self.rowCount - r), arrow]; 
      [label drawAtPoint:NSMakePoint((x + 5.0), (y + self.height - 16.0)) withAttributes:attributes]; 
      x += self.width; 
      useColor0 = !useColor0; 
     } 
     x = 0.0; 
     y += self.height; 
     useColor0 = (r % 2); 
    } 
} 

@end 

Sie können eine Demo-Anwendung hier herunterladen: BoxesDemo.zip

+0

Sie SO für diesen Code viel Danke !! Ich schätze wirklich deine Hilfe für diese Länge. Ich würde gerne mit Ihnen chatten, wenn es Ihnen nichts ausmacht, mailen Sie mir bei rit3sh7 bei Google Mail, wenn es Ihnen nichts ausmacht? – ritesh