iphone - tamaño - ¿Hay alguna manera de cambiar el color de los puntos del indicador de página?
no puedo escribir en whatsapp iphone (10)
Aquí hay una respuesta relacionada para usar una imagen personalizada (si es flexible y puede usar una imagen en lugar de alterar los colores directamente).
Personalizar punto con imagen de UIPageControl en el índice 0 de UIPageControl
Soy novato de la programación de iphone, estoy tratando de desarrollar una aplicación que use control de página. El color de fondo de mi vista es blanco y el controlador de página predeterminado también es blanco, lo que hace que el control de página sea invisible en mi vista, así que he cambiado el color de fondo del control de página para que sea visible. Ahora, la vista aparece parchada y mal. ¿Hay alguna manera de cambiar solo el color de los puntos para el control de página?
Gracias por adelantado
Es posible que desee echarle un vistazo a esta solución en otra pregunta de .
La aplicación falla en iOS7. Tengo una solución para iOS 7:
Motivo de Crash:
en iOS 7 [self.subViews objectAtIndex: i]
devuelve UIView
lugar de UIImageView
y setImage
no es propiedad de UIView
y la aplicación falla. Resuelvo mi problema usando el siguiente código.
Compruebe si la subvista es UIView
(para iOS7) o UIImageView
(para iOS6 o anterior). Y si es UIView
, voy a agregar UIImageView
como subvista en esa vista y listo para funcionar y no fallar ... !!
-(void) updateDots
{
for (int i = 0; i < [self.subviews count]; i++)
{
UIImageView * dot = [self imageViewForSubview: [self.subviews objectAtIndex: i]];
if (i == self.currentPage) dot.image = activeImage;
else dot.image = inactiveImage;
}
}
- (UIImageView *) imageViewForSubview: (UIView *) view
{
UIImageView * dot = nil;
if ([view isKindOfClass: [UIView class]])
{
for (UIView* subview in view.subviews)
{
if ([subview isKindOfClass:[UIImageView class]])
{
dot = (UIImageView *)subview;
break;
}
}
if (dot == nil)
{
dot = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, view.frame.size.width, view.frame.size.height)];
[view addSubview:dot];
}
}
else
{
dot = (UIImageView *) view;
}
return dot;
}
Espero que esto resuelva tu problema también para iOS7. y si Anypone encuentra la solución óptima para eso, por favor comenten. :)
Feliz codificación
La mejor y más simple forma de hacerlo es agregar las siguientes líneas de código en el método didFinishLaunchingWithOptions en AppDelegate.m
UIPageControl *pageControl = [UIPageControl appearance];
pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
pageControl.backgroundColor = [UIColor whiteColor];
La respuesta de JWD es el camino a seguir. Sin embargo, si todo lo que desea es simplemente cambiar el color, ¿por qué no hacer esto?
¡Esta técnica solo funcionará en iOS6.0 y superior!
Seleccione su UIPageControl vaya al inspector de atributos. Tada.
O alternativamente puedes jugar con estas 2 propiedades:
pageIndicatorTintColor property
currentPageIndicatorTintColor property
Esto es tan simple Leí la pregunta nuevamente para asegurarme de que no estoy equivocado. Realmente solo quieres cambiar el color, ¿verdad? Entonces sí.
Todavía estás atrapado con esos puntos legales. Usa la técnica JWD para las asombrosas imágenes de puntos.
Personalizamos el UIPageControl para usar una imagen personalizada para el indicador de página, he enumerado las agallas de la clase a continuación ...
GrayPageControl.h
@interface GrayPageControl : UIPageControl
{
UIImage* activeImage;
UIImage* inactiveImage;
}
GrayPageControl.m
-(id) initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
activeImage = [[UIImage imageNamed:@"active_page_image.png"] retain];
inactiveImage = [[UIImage imageNamed:@"inactive_page_image.png"] retain];
return self;
}
-(void) updateDots
{
for (int i = 0; i < [self.subviews count]; i++)
{
UIImageView* dot = [self.subviews objectAtIndex:i];
if (i == self.currentPage) dot.image = activeImage;
else dot.image = inactiveImage;
}
}
-(void) setCurrentPage:(NSInteger)page
{
[super setCurrentPage:page];
[self updateDots];
}
Luego en View Controller simplemente lo usamos como un UIPageControl normal
IBOutlet GrayPageControl* PageIndicator;
Editar:
En el controlador de vista que tiene el GrayPageControl tengo un IBAction que está vinculado al evento GrayPageControl.ValueChanged.
-(IBAction) pageChanged:(id)sender
{
int page = PageIndicator.currentPage;
// update the scroll view to the appropriate page
CGRect frame = ImagesScroller.frame;
frame.origin.x = frame.size.width * page;
frame.origin.y = 0;
[ImagesScroller scrollRectToVisible:frame animated:YES];
}
Puede cambiar el color del tinte del indicador de página y el color del tinte del indicador de la página actual con el siguiente código:
pageControl.pageIndicatorTintColor = [UIColor orangeColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
si solo desea cambiar el color de los puntos o personalizarlo, puede hacerlo según lo recomendado por JWD, pero de una forma un poco diferente:
#pragma mark - LifeCycle
- (void)setCurrentPage:(NSInteger)page
{
[super setCurrentPage:page];
[self updateDots];
}
#pragma mark - Private
- (void)updateDots
{
for (int i = 0; i < [self.subviews count]; i++) {
UIView* dot = [self.subviews objectAtIndex:i];
if (i == self.currentPage) {
dot.backgroundColor = UIColorFromHEX(0x72E7DB);
dot.layer.cornerRadius = dot.frame.size.height / 2;
} else {
dot.backgroundColor = UIColorFromHEX(0xFFFFFF);
dot.layer.cornerRadius = dot.frame.size.height / 2 - 1;
dot.layer.borderColor = UIColorFromHEX(0x72E7DB).CGColor;
dot.layer.borderWidth = 1;
}
}
}
Como resultado obtendrás algo como
También macros:
#define UIColorFromHEX(hexValue) [UIColor colorWithRed:((float)((hexValue & 0xFF0000) >> 16))/255.0 green:((float)((hexValue & 0xFF00) >> 8))/255.0 blue:((float)(hexValue & 0xFF))/255.0 alpha:1.0]
solo una línea de código muestra su demanda. El ejemplo establecido en color negro.
pageControl.pageIndicatorTintColor = [UIColor blackColor];
DDPageControl es un excelente reemplazo. ¡Echale un vistazo!