Pregunta

Estoy confundido por qué mi aplicación se bloquea con este error.

he implementado el método displayLayer (para la representación CALayer). La primera vez que este método se ejecuta cosas funcionan bien. Sin embargo, las llamadas posteriores a esto es cuando se produce el error.

parece ocurrir cuando el self.bgColor se establece en el color de relleno contexto el error. INTERESANTE ... si creo la derecha bgColor antes de esa línea, las cosas funcionan. Pero tal y como está, la bgColor se está creando en la inicialización de esta clase (el contenedor del método displayLayer).

-(void)displayLayer:(CALayer *)caLayer
{
  UIGraphicsBeginImageContext(caLayer.frame.size);
  CGContextRef context = UIGraphicsGetCurrentContext();    
  CGContextSetFillColorWithColor(context, self.bgColor);
  CGContextFillRect(context, CGRectMake(0, 0, 320, 25)); 
  [self drawText:context];
  // get image buffer
  UIImage *imageBuffer = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  // set layer contents to image buffer
  caLayer.contents = (id)[imageBuffer CGImage];
}
¿Fue útil?

Solución

No he hecho mucho de programación iPhone, sin embargo, y nunca usado una variable de instancia CGColor, así que lo que me gustaría hacer es la siguiente:

@interface {
    ....
    UIColor *bgColor;
    ....
}
@property (nonatomic, retain) UIColor *bgColor;
...
@end

@implementation
@synthesize bgColor;
- (id)init {
    ...
    self.bgColor = [UIColor blackColor];
    ...
}
-(void)displayLayer:(CALayer *)caLayer {
    ...
    CGContextSetFillColorWithColor(context, self.bgColor.CGColor);
    ...
}
...
@end

[UIColor blackcolor] devuelve un objeto autoreleased, y se le asignó a la variable de instancia sin retenerlo.

El uso de self.bgColor en lugar de sólo bgColor en init y haber establecido la propiedad de retener su valor se asegurará de que el color se conserva y se puede utilizar en displayLayer más adelante.

Como ya se ha mencionado que no tengo ninguna experiencia con el uso de CGColors directamente, es por eso que estoy usando un UIColor en el código de seguridad. Por favor, ajuste según sea necesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top