switch guidelines iphone ios

iphone - guidelines - Personalice el punto con la imagen de UIPageControl en el índice 0 de UIPageControl



navigation ios (8)

Soy un nuevo alumno de la programación de iOS. He intentado buscar con otro ejemplo y más preguntas en stackoverflow pero no es mi objetivo. Quiero establecer una imagen de punto en el índice 0 de UIPageControl similar a la pantalla de inicio de búsqueda de iPhone. ¿Tienes alguna forma de hacerlo? Por favor explícame con algún código u otro enlace útil.

Gracias por adelantado


Actualización para Swift 3.0 ... sabe si está de acuerdo con aceptar el riesgo declarado: "Modificar las subvistas de un control existente es frágil".

import UIKit class CustomImagePageControl: UIPageControl { let activeImage:UIImage = UIImage(named: "SelectedPage")! let inactiveImage:UIImage = UIImage(named: "UnselectedPage")! override func awakeFromNib() { super.awakeFromNib() self.pageIndicatorTintColor = UIColor.clear self.currentPageIndicatorTintColor = UIColor.clear self.clipsToBounds = false } func updateDots() { var i = 0 for view in self.subviews { if let imageView = self.imageForSubview(view) { if i == self.currentPage { imageView.image = self.activeImage } else { imageView.image = self.inactiveImage } i = i + 1 } else { var dotImage = self.inactiveImage if i == self.currentPage { dotImage = self.activeImage } view.clipsToBounds = false view.addSubview(UIImageView(image:dotImage)) i = i + 1 } } } fileprivate func imageForSubview(_ view:UIView) -> UIImageView? { var dot:UIImageView? if let dotImageView = view as? UIImageView { dot = dotImageView } else { for foundView in view.subviews { if let imageView = foundView as? UIImageView { dot = imageView break } } } return dot } }



De la respuesta de iProgrammer
En caso de que quieras esconder el punto original.

- (UIImageView *)imageViewForSubview:(UIView *)view { UIImageView * dot = nil; [view setBackgroundColor:[UIColor clearColor]]; << add this line


He encontrado una solución para este problema. Sé que no es así, pero funcionará hasta que iOS 8 se lance al mercado.

Motivo del accidente:

en iOS 7 [self.subViews objectAtIndex: i] devuelve UIView en lugar de UIImageView y setImage no es propiedad de UIView y la aplicación se bloquea. 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 ¡voilá su funcionamiento y no se cuelgue ...!

-(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; }

Además, para borrar las imágenes que ya están allí, configure los colores de tinte para que los indicadores existentes sean transparentes:

- (void)awakeFromNib { self.pageIndicatorTintColor = [UIColor clearColor]; self.currentPageIndicatorTintColor = [UIColor clearColor]; }

Espero que esto resuelva tu problema para iOS 7.

Feliz codificacion


La mejor compilación del código para Swift 3 para reemplazar el primer icono de UIPageControl por un marcador de ubicación:

import UIKit class LocationPageControl: UIPageControl { let locationArrow: UIImage = UIImage(named: "locationArrow")! let pageCircle: UIImage = UIImage(named: "pageCircle")! override var numberOfPages: Int { didSet { updateDots() } } override var currentPage: Int { didSet { updateDots() } } override func awakeFromNib() { super.awakeFromNib() self.pageIndicatorTintColor = UIColor.clear self.currentPageIndicatorTintColor = UIColor.clear self.clipsToBounds = false } func updateDots() { var i = 0 for view in self.subviews { var imageView = self.imageView(forSubview: view) if imageView == nil { if i == 0 { imageView = UIImageView(image: locationArrow) } else { imageView = UIImageView(image: pageCircle) } imageView!.center = view.center view.addSubview(imageView!) view.clipsToBounds = false } if i == self.currentPage { imageView!.alpha = 1.0 } else { imageView!.alpha = 0.5 } i += 1 } } fileprivate func imageView(forSubview view: UIView) -> UIImageView? { var dot: UIImageView? if let dotImageView = view as? UIImageView { dot = dotImageView } else { for foundView in view.subviews { if let imageView = foundView as? UIImageView { dot = imageView break } } } return dot } }

Imágenes adjuntas:


Prueba este enlace: -

Responda con GrayPageControl: - ¿Hay alguna manera de cambiar el color de los puntos del indicador de página

Es realmente bueno y confiable. También he usado este código.

Es posible que tengas que hacer algo más de personalización como

-(void) updateDots { for (int i = 0; i < [self.subviews count]; i++) { UIImageView* dot = [self.subviews objectAtIndex:i]; if (i == self.currentPage) { if(i==0) { dot.image = [UIImage imageNamed:@"activesearch.png"]; } else { dot.image = activeImage; } } else { if(i==0) { dot.image = [UIImage imageNamed:@"inactivesearch.png"]; } else { dot.image = inactiveImage; } } } }


Simplemente cambie el indicador de la página UIPageControl self.pageControl.currentPageIndicatorTintColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"circle"]];


Solo necesitas hacerlo así:

((UIImageView *)[[yourPageControl subviews] objectAtIndex:0]).image=[UIImage imageNamed:@"search.png"];