2009-12-28 3 views
0

Aidez-nous!Comment mettre à jour une étiquette d'une vue personnalisée dans une vue déroulante à l'aide d'une minuterie

Je définis un UIControl personnalisé avec trois étiquettes, puis sur la fonction viewDidLoad du contrôleur de vue principal, j'ajoute à plusieurs reprises plusieurs instances de ce UIControl dans la vue défilement.

J'ai besoin de l'une des étiquettes de l'UIControl pour être mise à jour avec une nouvelle valeur chaque seconde. J'ai une question, comment effacer la vue personnalisée précédemment dessinée? Ou quelle est la méthode pour mettre à jour cette étiquette avec les meilleures performances de dessin?

- (void) updateMinuteLabel{ 
    CustomIconControl *control = nil; 
    for (control in scrollView.subviews){ 
    if ([view isKindOfClass:[CustomIconControl class]] && control.tag >0){ 
     CustomIconControl *item = (CustomIconControl *) control; 
     item.intMinute += 1; 
     [item setNeedsDisplay]; 
    } 
    } 
} 

Dans la drawRect: fonction du CustomIconControl, j'utilise la

[minuteString drawInRect: minuteRect withFont: [UIFont systemFontOfSize:10]; 

Avec ce code, il continue de tirer sans effacer les contrôles établis précédemment.

Quelqu'un peut-il aider? S'il vous plaît dites-moi si vous avez besoin de plus d'informations, bien sûr j'ai le code pour personnaliser le dessin de CustomIconControl, l'initialisation du timer, viewDidLoad, etc

Répondre

1

Vous dites que votre UIControl a trois étiquettes, voulez-vous dire que vous ajoutez trois UILabel's comme sous-vues de l'UIControl? Si oui, vous pouvez simplement la propriété text »de l'étiquette à la valeur et il se redessiner automatiquement - pas besoin de [... minuteString drawInRet

Sinon, si vous dessinez les trois « labels » dans drawRect :, appelant setNeedsDisplay: après qu'IntMinute est mis à jour, provoque DrawRect: à être appelé, dessinant ainsi le texte mis à jour.

En outre, je recommande à votre CustomIconControl d'appeler lui-même setNeedsDisplay lorsque intMinute est mis à jour. Andrew

+0

salut Andrew, j'ai dessiné trois étiquettes avec des méthodes drawInRect Ma solution temporaire consiste à redessiner tout le rect de ma vue personnalisée (CustomIconControl) avec la couleur de la couleur d'arrière-plan. Ensuite, redessinez la chaîne en utilisant le drawInRect, mais cela semble beaucoup de travail, j'ai juste besoin de mettre à jour la chaîne que je viens de dessiner avec drawInRect: Le setNeedsDisplay de CustomIconControl va redessiner tout le rect, dans lequel je ne veux pas, car outre l'étiquette de la minute, les deux autres étiquettes et l'arrière-plan de l'image ne changent pas. –

+0

Je vois. Dans drawRect, appelez ceci en premier: 'CGContextClearRect (UIGraphicsGetCurrentContext(), rect);' Ceci effacera le rect afin que le dessin suivant ne s'empile pas. – Andrew

+0

oohhh merci Andrew, ça marche;) –

Questions connexes