2010-04-20 9 views
8

Ich habe Apps (z. B. Meebo) gesehen, die unterschiedliche Indikatoren auf UIPageControls anstelle der standardmäßigen weißen Kreise haben.Wie ändere ich UIPageControl dots

gibt es eine einfache Möglichkeit, dies zu tun? Ich habe die Dokumentation für UIPageControls gelesen und es scheint, dass es keine Methoden zum Ersetzen der Bilder gibt.

+0

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

+2

Dies ist kein Betrüger der anderen Frage: hier wollen wir wissen, wie man die Punkte ändert; Der verlinkte "Dupe" möchte nur die Farbe ändern. Meine Lösung ist an Aragons unten angehängt. –

+0

Da dieser "Dupe" keine Antworten mehr akzeptiert, werde ich eine andere Lösung kommentieren. Wenn Sie nur die Größe der Punkte ändern möchten, können Sie pagecontrol.transform = CGAffineTransformMakeScale (2, 2); – mvandillen

Antwort

5

Es gibt keine öffentliche API zum Ändern der Bilder. Sie können einen Blick auf this blog post werfen, die eine Methode zum Anpassen der UIPageControl beschreibt.

21

Sie diese Schritte, indem Sie die folgenden erreichen:

1- eine benutzerdefinierte Klasse erstellen, die von UIPageControl erbt.

2- Weisen Sie diese Klasse dem erforderlichen UIPageControl zu, dessen Punkte geändert werden sollen.

3- Fügen Sie den folgenden Code in Ihre benutzerdefinierte UIPageControl-Klasse ein.

Setzen Sie dieses in der customClass.m Datei:

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

Setzen Sie dieses in der customClass.h Datei

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

5- Gerade die aktuelle Seite Ihrer UIPageControl in der Klasse festgelegt, dass Sie Legen Sie die Seitensteuerung mit der folgenden Zeile hinein:

[self.pageControl setCurrentPage:number]; 

Denken Sie daran, die aktuelle Seite einzustellen in der viewDidLoad() -Methode in der Ansicht von diesem UIPageControl ist drin.

Wenn die Ansicht geladen wird, werden die UIPageControl-Bilder festgelegt.

+2

Punkte sind UIView Objekte in iOS7, also müssen Sie den Code aktualisieren. – Centurion

+0

Ich habe den Code für Aragons updateDots aktualisiert: Methode, um iOS 7 zu unterstützen. Siehe meine Antwort unten. –

+0

Flüche, Antworten sind geschlossen, obwohl ich diese Lösung besser mag als die auf der verlinkten Seite, für die das angeblich ein Betrogener ist. Einfach gesagt, sind die Unterübersichten von PageControl UIViews, also gebe ich ein UIImageView in sie ein: –