Comment puis-je réduire les images utilisées dans un Le résultat n'est pas ce que j'attends. Les images de .png d'origine sont d'environ 100 pixels élevés, et ils sont pas em> à l'échelle à la hauteur de 32 pixels de la commande segmentée. Il en résulte une commande segmentée étant dessinée avec d'énormes images qui se chevauchent: p> Comment puis-je dire au contrôle de réduire ces images? p> p> UisegmentedControl code>? Je crée le contrôle segmenté par programme:
< / p>
3 Réponses :
Vous ne devez jamais utiliser une "grosse" image pour afficher uniquement une petite picto. L'image complète sera chargée en mémoire et seulement 10% de ses pixels seront affichés. Vous allez donc utiliser beaucoup de mémoire pour rien.
Ce que vous pouvez faire si vous voulez vraiment utiliser cette ressource, c'est créer une vignette Avec code avant, et utilisez cette nouvelle vignette générée. p>
La méthode suivante renvoie une nouvelle image que vous pouvez utiliser dans votre uisegmentedControl, et vous pouvez libérer le BIG ONE. P>
UISegmentedControl * segmentButton; segmentButton = [UISegmentedControl segmentedControlWithItems: [NSArray arrayWithObjects: [self imageWithImage:[UIImage imageNamed:@"option_one.png"] scaledToSize:CGSizeMake(32, 32)], [self imageWithImage:[UIImage imageNamed:@"option_two.png"] scaledToSize:CGSizeMake(32, 32)], nil]]; segmentButton.contentMode = UIViewContentModeScaleToFill; segmentButton.frame = CGRectMake(10, 10, 200, 32); [view addSubview:segmentButton];
D'accord, si les images sont dynamiques, évoluez-les, sinon offrent différentes tailles dans vos ressources d'application.
segmentbutton = [[[[[[[[[[[[[[[[[[UisegmentedControl Alloc] Initwithitems: Images] Autoréleuillet];
dans SWIFT3,
extension UIImage { func scaleImage(scaleToSize: CGSize) -> UIImage { UIGraphicsBeginImageContext(scaleToSize) self.draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: scaleToSize)) let newImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return newImage! } }