This is my code.
NSArray *sub = [self.view subviews];
if ([sub count] == 0) return;
for (int i=0; i<sub.count; i++){
UIButton *boton = (UIButton *)sub[i];
//Convierto el boton a UIImage
UIGraphicsBeginImageContextWithOptions(boton.bounds.size, NO, 0.0);
[boton.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * imageOriginal = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// crear un nuevo tamaño, es decir el tamaño de imagen redimensionado
CGSize sz = CGSizeMake(boton.frame.size.width, boton.frame.size.height);
// hacer el recorte final rec basado en los valores calculados
CGRect clipRect = CGRectMake(boton.frame.origin.x, boton.frame.origin.y, boton.frame.size.width, boton.frame.size.height);
// inicia un nuevo contexto, con el factor de escala 0.0 para que las pantallas retina obtengan una imagen de alta calidad
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
UIGraphicsBeginImageContextWithOptions(sz, NO, 0.0);
} else {
UIGraphicsBeginImageContext(sz);
}
//Modifica el trazado de recorte actual interceptándolo con el rectángulo especificado
UIRectClip(clipRect);
//Dibuja toda la imagen en el rectángulo especificado, escalándola según sea necesario para que se ajuste. Este método dibuja toda la imagen en el contexto gráfico actual, respetando el ajuste de orientación de la imagen. En el sistema de coordenadas por defecto, las imágenes se sitúan abajo ya la derecha del origen del rectángulo especificado. Sin embargo, este método respeta cualquier transformación aplicada al contexto gráfico actual.
[imageOriginal drawInRect:clipRect];
//Elimina el contexto de gráficos basado en mapas de bits actual de la parte superior de la pila
UIGraphicsEndImageContext();
[sub[i] setImage:imageOriginal];
NSLog(@"ImageButton: %@", boton);
}
Unfortunately there is a way to pass the image that I store in the UIImage to the UIIbutton
I finally found how to fix the problem.
In general, if a property is not specified for a state, the default is to use the value
UIControlStateNorma
l. If the valueUIControlStateNormal
is not set, the default property is a system value . So at a minimum you need to set the value for the normal state, i.e.: