2010-04-20 5 views
8

Ho visto app (ad esempio meebo) che hanno indicatori diversi su UIPageControls invece che cerchi bianchi predefiniti.come modificare i punti UIPageControl

c'è un modo semplice per farlo? Ho letto i documenti per UIPageControls e sembra che non ci siano metodi per sostituire le immagini.

+0

[** HHPageControl **] (https://github.com/hemangshah/HHPageController) – Hemang

+2

Questo non è un problema dell'altra domanda: qui vogliamo sapere come modificare i punti; il "dupe" collegato vuole solo cambiare il colore. La mia soluzione è allegata al seguente di Aragon. –

+0

Poiché questo "dupe" non accetta più le risposte, commenterò un'altra soluzione. Se vuoi solo cambiare la dimensione dei punti puoi usare pagecontrol.transform = CGAffineTransformMakeScale (2, 2); I punti – mvandillen

risposta

5

Non c'è API pubblica per modificare le immagini. È possibile dare un'occhiata a this blog post, che descrive un metodo per personalizzare lo UIPageControl.

21

È possibile raggiungere questo obiettivo facendo le seguenti operazioni:

1- Creare una classe personalizzata che eredita da UIPageControl.

2- Assegnare questa classe al UIPageControl richiesto che si desidera modificare i suoi punti.

3- Inserire il seguente codice all'interno della classe UIPageControl personalizzata.

Mettere questo nel file customClass.m:

-(id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if(self) 
    { 
     activeImage = [UIImage imageNamed:@"active_dot.png"]; 
     inactiveImage = [UIImage imageNamed:@"inactive_dot.png"]; 
    } 
    return self; 
} 

-(void)updateDots 
{ 
    for (int i = 0; i < [self.subviews count]; i++) 
    { 
     UIImageView* dot = [self.subviews objectAtIndex:i]; 
     dot.frame = CGRectMake(dot.frame.origin.x, dot.frame.origin.y, 14, 14.5); 
     if (i == self.currentPage) 
      dot.image = activeImage; 
     else 
      dot.image = inactiveImage; 
    } 
} 

-(void)setCurrentPage:(NSInteger)page 
{ 
    [super setCurrentPage:page]; 
    [self updateDots]; 
} 

Mettere questo nel customClass.h il file

{ 
    UIImage* activeImage; 
    UIImage* inactiveImage; 
} 
@property(nonatomic, retain) UIImage* activeImage; 
@property(nonatomic, retain) UIImage* inactiveImage; 

5- Basta impostare la pagina corrente della vostra UIPageControl nella classe che si inserire il controllo pagina al suo interno utilizzando la seguente riga:

[self.pageControl setCurrentPage:number]; 

Ricordarsi di impostare la pagina corrente nel metodo viewDidLoad() nella vista che UIPageControl è al suo interno.

Quando viene caricata la vista, le immagini di UIPageControl verranno impostate.

+2

sono oggetti UIView in iOS7, quindi è necessario aggiornare il codice. – Centurion

+0

Ho aggiornato il codice per gli updatedot di Aragon: metodo per supportare iOS 7. Vedere la mia risposta di seguito. –

+0

Maledizioni, le risposte sono chiuse, anche se mi piace questa soluzione meglio di quella sulla pagina collegata per la quale si suppone che sia una cosa duplice. In poche parole, subviews di un PageControl sono UIViews, quindi sto iniettando un UIImageView in loro: –