Estoy dibujando una línea horizontal y una línea vertical en un UITableViewCell utilizando el siguiente código y funciona bien en iOS7. En Objective-C.

En la subclase de el,

@property (strong, nonatomic) NSMutableArray *columns;
- (void)drawRect:(CGRect)rect
{
//In iOS7, you have to set the cell's background color to clear otherwise the drawing lines won't appear
self.backgroundColor = [UIColor clearColor];
//Drawing the vertical line
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor(ctx, 0.5, 0.5, 0.5, 1.0);
CGContextSetLineWidth(ctx, 0.75);
for (int i = 0; i < self.columns.count; i++) {
CGFloat f = [((NSNumber*) [self.columns objectAtIndex:i]) floatValue];
CGContextMoveToPoint(ctx, f, 10);
CGContextAddLineToPoint(ctx, f, self.bounds.size.height - 10);
}
CGContextStrokePath(ctx);
//Drawing the horizontal line
CGContextRef cntx = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor(ctx, 0.5, 0.5, 0.5, 1.0);
CGContextSetLineWidth(cntx, 1);
for (int i = 0; i < self.columns.count; i++) {
CGContextMoveToPoint(cntx, 15, self.bounds.size.height / 2);
CGContextAddLineToPoint(cntx, 60, self.bounds.size.height / 2);
}
CGContextStrokePath(cntx);
[super drawRect:rect];
}
- (void)addColumn:(CGFloat)position
{
[self.columns addObject:[NSNumber numberWithFloat:position]];
}

Y se parece a esto,

Dibujo de líneas en Swift

Estoy tratando de implementar el mismo en Swift. Sin embargo, esas líneas no aparecen. Aquí está mi código hasta el momento,

var columns: [CGFloat] = []
override func drawRect(rect: CGRect)  {
//Drawing the vertical line
let ctx = UIGraphicsGetCurrentContext()
CGContextSetRGBStrokeColor(ctx, 0.5, 0.5, 0.5, 1.0)
CGContextSetLineWidth(ctx, 0.75)
for var i = 0; i < self.columns.count; i++ {
let f = self.columns[i] as? float //Error - Use of module 'float' as a type
CGContextMoveToPoint(ctx, f, 10)
CGContextAddLineToPoint(ctx, f, self.bounds.size.height - 10)
}
CGContextStrokePath(ctx)
//Drawing the horizontal line
let cntx = UIGraphicsGetCurrentContext()
CGContextSetRGBStrokeColor(ctx, 0.5, 0.5, 0.5, 1.0)
CGContextSetLineWidth(cntx, 1)
for var i = 0; i < self.columns.count; i++ {
CGContextMoveToPoint(cntx, 15, self.bounds.size.height / 2)
CGContextAddLineToPoint(cntx, 60, self.bounds.size.height / 2)
}
CGContextStrokePath(cntx)
self.backgroundColor = UIColor.clearColor()
super.drawRect(rect)
}
func addColumn(position: CGFloat) {
self.columns.append(NSNumber.numberWithFloat(position)) //Error - 'NSNumber' is not a subtype of 'Float'
}

Múltiples errores vienen en el primer bloque de código. El mensaje de error es ‘AnyObject’ no es convertible ‘CGFloat’.
No hay errores en el segundo bloque, pero sigue siendo la línea no aparece.

Por favor alguien puede decirme lo que me falta aquí?

Gracias.

  • Supongo que es la línea con let f = auto.las columnas[i]. Trate de fundición a flotar en lugar sea f = auto.las columnas[i] como? flotador. No tratamos de que a mí mismo. Yo soy MUY nuevo en Swift demasiado.
  • es más bien, sin duda, el tipo de f está mal. Usted debe utilizar [CGFloat] como el tipo del auto.las columnas de la matriz en lugar de NSArray
  • Hola, gracias a ambos de las respuestas. He cambiado el tipo de la matriz como esta var columns: [CGFloat] = [] y cambió el error de tirar línea a este let f = self.columns[i] as? float pero me sale un error diciendo: Uso del módulo de «flotación» como un tipo de. Yo también me olvidé de mencionar que existe un método que agrega objetos a las columnas de la matriz. Traté de traducir que a Swift y consiguió otro error también. He actualizado el fragmento de código en consecuencia en mi post original.
InformationsquelleAutor Isuru | 2014-07-17

2 Comentarios

  1. 4

    Objective-C sólo puede almacenar objetos en un NSArray es por eso que el valor de tipo float tenía que ser envuelto en una NSNumber. En Swift, esto es mucho más fácil ya que sólo puede almacenar la flota directamente. Ahora que su columns matriz es de tipo [CGFloat] usted puede simplemente añadir el valor sin envolviéndola como un NSNumber:

    func addColumn(position: CGFloat) {
    self.columns.append(position)
    }

    No es necesario convertir los valores procedentes de la columns matriz porque ya están las carrozas:

    for f in self.columns {
    CGContextMoveToPoint(ctx, f, 10)
    CGContextAddLineToPoint(ctx, f, self.bounds.size.height - 10)
    }
    • Muchas gracias. Funcionó a la perfección. Poco a poco estoy empezando a ver el lado bueno de Swift.

Dejar respuesta

Please enter your comment!
Please enter your name here