9
votes

Mise à l'échelle de l'imageControl

Comment puis-je réduire les images utilisées dans un UisegmentedControl ? Je crée le contrôle segmenté par programme: xxx

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 à 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:

écran d'écran < / p>

Comment puis-je dire au contrôle de réduire ces images?


0 commentaires

3 Réponses :


20
votes

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


2 commentaires

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



1
votes

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!
    }
}


0 commentaires

0
votes

pour iOS 14 et ultérieure

uigraphicgetimagefromCurrentImagecontext FAIRE UNE IMAGE NON CLAIRE, donc je passe à uigraphicsimagerender , ça marche bien pour Moi.

 Entrez la description de l'image ici xxx


0 commentaires