Horizontalmente centrar múltiples UIViews

Quiero centrar horizontalmente una cantidad de UIViews (son círculos) en el maestro UIView. Terminará básicamente como los puntos en el control de página estándar.

Tengo todo el código escrito para crear el círculo UIViews No tengo idea de cómo organizarlos horizontal y dinámicamente en time de ejecución.

Básicamente necesito algún tipo de contenedor horizontal donde pueda hacer esto

-(void)addCircle{ [self addSubView:[CircleView init]]; } 

Y arreglará automáticamente cuantos niños tenga en el centro.

También me confundo con el layout automático de vez en cuando, pero esta es una manera de cómo hacerlo mediante progtwigción: (supongo que agrega las vistas de círculo a una propiedad de containerView de su controller de vista y no agrega ninguna otra vista lo.)

  1. Agregue estas dos properties a su controller de vista:

     @property (nonatomic) CGRect circleViewFrame; @property (nonatomic) CGFloat delta; 
  2. Inicie esas properties con los valores deseados en el método viewDidLoad del controller:

     // the size (frame) of your circle views self.circleViewFrame = CGRectMake(0, 0, 10, 10); // the horizontal distance between your circle views self.delta = 10.0; 
  3. Ahora agregamos su "método addCircle automático":

     - (void)addCircleView { UIView *newCircleView = [self createCircleView]; [self.containerView addSubview:newCircleView]; [self alignCircleViews]; } 
  4. Por supuesto, necesitamos implementar el método createCircleView

     - (UIView*)createCircleView { // Create your circle view here - I use a simple square view as an example UIView *circleView = [[UIView alloc] initWithFrame:self.circleViewFrame]; // Set the backgroundColor to some solid color so you can see the view :) circleView.backgroundColor = [UIColor networkingColor]; return circleView; } 
  5. … y el método alignCircleViews :

     - (void)alignCircleViews { int numberOfSubviews = [self.containerView.subviews count]; CGFloat totalWidth = (numberOfSubviews * self.circleViewFrame.size.width) + (numberOfSubviews - 1) * self.delta; CGFloat x = (self.containerView.frame.size.width / 2) - (totalWidth / 2); for (int i = 0; i < numberOfSubviews; i++) { UIView *circleView = self.containerView.subviews[i]; circleView.frame = CGRectMake(x, self.circleViewFrame.origin.y, self.circleViewFrame.size.width, self.circleViewFrame.size.height); x += self.circleViewFrame.size.width + self.delta; } } 

Este es el método más importante que realineará automáticamente todas tus subcounts cada vez que se agregue un nuevo circleView. El resultado se verá así:

controlador de vista de muestra con 3 subvenciones centradas horizontalmentecontrolador de vista de muestra con 8 subvenciones centradas horizontalmente

Pasos simples: agregar círculo a la vista del contenedor, cambiar el tamaño de la vista del contenedor, alinear el centro de la vista del contenedor

 - (void) addToContanerView: (CircleView *) circle {

     circle.rect.frame = CGrectMake (containers_end, container_y, no_change, no_change);
     [containerView addSubview: círculo];
     [containerView sizeToFit];
     containerView.center = self.view.center;
 }

Suposiciones: contenedores_end y contenedores_y puede get de la function CGRectMax, para ver el método UIView SizeToFit, haga clic aquí

Para ocuparse de la rotation, asegúrese de que sus subprocesss de autorlogging estén configurados para el margen izquierdo, derecho inferior y superior.

Puede intentar usar esta biblioteca. Lo he usado en varios de mis proyectos y, hasta ahora, funcionó muy bien.

https://github.com/davamale/DMHorizontalView