Ho un UIView
e al suo interno ho tracciato una linea utilizzando Core Graphics sovrascrivendo drawRect
. Questa vista contiene anche una sottoview che disegna anche una linea. Tuttavia, mentre entrambe le viste stanno usando più o meno lo stesso codice (a scopo di test, almeno), le linee tracciate su di essi non appaiono lo stesso:iPhone Core Graphics linea tratteggiata più spessa per subview
Come si può vedere - la linea tratteggiata al la parte superiore è visibilmente più spessa di quella inferiore e non ho idea del perché. Di seguito è riportato il codice utilizzato dai due UIViews
nei loro metodi drawRect
. Se hai qualche idea del perché questo sta accadendo, apprezzerei il tuo aiuto e i tuoi consigli!
Prima Vista:
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [[UIColor whiteColor] CGColor]);
CGFloat dashes[] = {1,1};
CGContextSetLineDash(context, 0.0, dashes, 2);
CGContextSetLineWidth(context, 0.6);
CGContextMoveToPoint(context, CGRectGetMinX(rect), CGRectGetMaxY(rect));
CGContextAddLineToPoint(context, CGRectGetMaxX(rect), CGRectGetMaxY(rect));
CGContextStrokePath(context);
SubUIView *view = [[SubUIView alloc] initWithFrame:rect];
[self addSubview:view];
[view release];
La vista è sicuramente solo in fase di elaborazione una volta. Apprezzo che drawRect
non sia il posto migliore per aggiungere una sottoview ma il problema rimane anche se è stato aggiunto nel metodo principale initWithFrame
.
Seconda Vista:
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [[UIColor whiteColor] CGColor]);
CGFloat dashes[] = {1,1};
CGContextSetLineDash(context, 0.0, dashes, 2);
CGContextSetLineWidth(context, 0.6);
CGContextMoveToPoint(context, CGRectGetMinX(rect), CGRectGetMidY(rect));
CGContextAddLineToPoint(context, CGRectGetMaxX(rect), CGRectGetMidY(rect));
CGContextStrokePath(context);
Perché stai aggiungendo una sottoview in 'drawRect:'? – jer
@jer: ha importanza? Posso aggiungere la sottoview da un altro metodo come 'initWithFrame', ma c'è ancora una differenza nello spessore della linea. A meno che non intenda aggiungere sottoview a una vista che "disegna" su se stessa e quindi il problema (?), Ma non l'ho letto da nessuna parte ... ancora. – JoeR
@JoeR, sì può essere importante - aggiungi sottoview ogni volta che la tua vista si disegna in modo che tu possa terminare con più sottoview identiche poste l'una sull'altra - e questo potrebbe causare linee di sottofondo più spesse man mano che venivano disegnate più volte – Vladimir