Soy un principiante en la programación de iOS, lo siento si mi pregunta es una pregunta estúpida.UIView subclase: drawRect no se llama
Estoy tratando de hacer una aplicación que realice dibujos personalizados en una imagen cargada.
Para hacerlo, descubrí que una solución es la subclase UIView
y edito el método drawRect
.
Lo hice en el siguiente código que se activa en un IBAction
vinculado a un botón en el archivo del guión gráfico del Interface Builder.
UIImageView *image = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @"SampleImage.jpg"]];
image.frame = previewView.frame;
[image setContentMode:UIViewContentModeScaleAspectFit];
[previewView addSubview:image];
customView *aCustomView = [[customView alloc] initWithFrame: CGRectMake(image.bounds.origin.x, image.bounds.origin.y, image.bounds.size.width, image.bounds.size.height)];
[previewView addSubview:aCustomView];
customView
es el UIView
subclase que he creado, cuya init
y drawRect
métodos se establecen así:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
NSLog(@"INITIALIZING");
if (self) {
// Initialization code
[self setBackgroundColor:[UIColor clearColor]];
}
return self;
}
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
NSLog(@"DRAWING");
CGContextClearRect(ctx, rect);
CGContextSetRGBFillColor(ctx, 0, 255, 0, 0.3);
CGContextFillEllipseInRect(ctx, rect);
CGContextSetRGBStrokeColor(ctx, 255, 0, 0, 1);
CGContextSetLineWidth(ctx, 2);
CGContextStrokeEllipseInRect(ctx, rect);
}
El problema que tengo es que no se hace ningún dibujo y en NSLog
tengo la Mensaje "INICIALIZANDO", pero no el dibujo "DIBUJO".
Básicamente hace el initWithFrame
, pero no llama al método drawRect
.
¿Podría indicarme qué estoy haciendo mal?
Gracias, al poner el NSLog, descubrí que había algo mal en la llamada del método drawRect. Al agregar [previewView setNeedDisplay] se llama al método, pero no cuando espero que se haga. Es decir, al seguir los pasos del código, la ejecución de la línea [previewView setNeedDisplay] no hace que aparezca el dibujo personalizado, sino que aparece más tarde de alguna manera. Me gustaría saber en qué momento se llama al método drawRect, pero de todos modos el problema inicial está resuelto, gracias :) – Dobrodeveloper