Voici une version simple de ce que vous décrivez.
![alt text]()
C'est "simple" dans le sens que je n'ai pas pris la peine d'essayer d'ajouter de l'ombrage et autres subtilités. Mais il est facile à construire et vous pouvez modifier à dessiner d'une manière plus subtile si vous le souhaitez. Par exemple, vous pouvez faire votre propre image et l'utiliser comme le curseur de pouce.
C'est en fait une UISlider sous-classe située au-dessus d'une sous-classe UIView (MyTherm) qui attire le thermomètre, en plus de deux UILabels qui tire les numéros.
Le UISlider sous-classe élimine le haut-piste, de sorte que le thermomètre derrière elle montre à travers. Mais le UISlider pouce (knob) est encore déplaçable de façon normale, et vous pouvez mettre une image personnalisée, obtenir la Valeur événement a Changé lorsque l'utilisateur fait glisser, et ainsi de suite. Voici le code pour le UISlider sous-classe qui élimine sa propre piste:
- (CGRect)trackRectForBounds:(CGRect)bounds {
CGRect result = [super trackRectForBounds:bounds];
result.size.height = 0;
return result;
}
Le thermomètre est une instance d'une coutume sous-classe UIView, MyTherm. J'ai instancié dans la plume et non Opaque et lui a donné une couleur d'arrière-plan de Couleur Claire. Il a un value
de la propriété de sorte qu'il sait combien de remplir le thermomètre. Voici son drawRect:
code:
- (void)drawRect:(CGRect)rect {
CGContextRef c = UIGraphicsGetCurrentContext();
[[UIColor whiteColor] set];
CGFloat ins = 2.0;
CGRect r = CGRectInset(self.bounds, ins, ins);
CGFloat radius = r.size.height / 2.0;
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, CGRectGetMaxX(r) - radius, ins);
CGPathAddArc(path, NULL, radius+ins, radius+ins, radius, -M_PI/2.0, M_PI/2.0, true);
CGPathAddArc(path, NULL, CGRectGetMaxX(r) - radius, radius+ins, radius, M_PI/2.0, -M_PI/2.0, true);
CGPathCloseSubpath(path);
CGContextAddPath(c, path);
CGContextSetLineWidth(c, 2);
CGContextStrokePath(c);
CGContextAddPath(c, path);
CGContextClip(c);
CGContextFillRect(c, CGRectMake(r.origin.x, r.origin.y, r.size.width * self.value, r.size.height));
}
Pour changer le thermomètre de la valeur, modifiez le MyTherm de l'instance de l' value
le nombre est compris entre 0 et 1, et dites-lui de se redessiner avec setNeedsDisplay
.