Ridimensiona / scala un’ immagine – Utilizzando una Categoria di Objective-C

Visto quanto sia comune il ridimensionamento di una immagine in un’applicazione, mi sorprende che questo metodo non sia stato incluso nella classe UIImage. Procediamo e prendiamoci cura di questa omissione aggiungendo un semplice metodo che fornirà un mezzo per ridimensionare l’immagine.

resize_and_optimization

Useremo una “categoria” del linguaggio objective-c per aggiungere un metodo alla classe UIImage. Abbiamo già visto cosa sono nello specifico le categorie in questo articolo e anche qui, ed anche qui in modo più avanzato. Nessuna questione, le categorie sono vostre amiche in questi casi, dove abbiamo necessità di aggiungere funzionalità ad una classe esistente.

Definire la categoria

Per aggiungere un metodo alla classe UIImage, ci sono due passi a cui dobbiamo fare attenzione nella definizione dell’interfaccia. In primo luogo, creare una definizione di interfaccia per UIImage e aggiungere un nome di categoria all’interno di parentesi dopo la dichiarazione di interfaccia. In secondo luogo, creare la dichiarazione di metodo. Ecco un esempio:

// UIImage+Scale.h

@interface UIImage (scale)

-(UIImage*)scaleToSize:(CGSize)size;

@end

Implementare la categoria

Con l’interfaccia al suo posto, scriviamo il codice per il metodo che sarà aggiunto alla classe UIImage:
// UIImage+Scale.h

#import "UIImage+Scale.h"

@implementation UIImage (scale)

-(UIImage*)scaleToSize:(CGSize)size
{
// Creare un contesto grafico bitmap
// Questo sarà anche impostarlo come contesto attuale
UIGraphicsBeginImageContext(size);

// Disegna l'immagine ridimensionata nel contesto attuale
[self drawInRect:CGRectMake(0, 0, size.width, size.height)];

// Creare una nuova immagine da contesto
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();

// Pop contesto attuale dallo stack
UIGraphicsEndImageContext();

// Restituisce la nostra nuova immagine in scala
return scaledImage;
}

@end

Usare il metodo scaleToSize:

Chiamare il nuovo metodo scala appena aggiunto è davvero semplice:

#import "UIImage+Scale.h"

...

// Creare l'immagine
UIImage *image = [UIImage imageNamed:@"myImage.png"];

// Scala l'immagine (25x35)
UIImage *scaledImage = [image scaleToSize:CGSizeMake(25.0f, 35.0f)];

Esercizio per casa:

Realizzare una versione thread-safe per caricare immagini scalate in un table view.

PS: butta un occhio sul Grand Central Dispatch (GCD)

Related Posts

Slack: La piattaforma per la comunicazione tra gruppi di lavoro

iOS: Fastlane … Il primo appriccio

iOS Continuos Integration con Xcode 9

Rating in iOS

Si prega di attivare i Javascript! / Please turn on Javascript!

Javaskripta ko calu karem! / Bitte schalten Sie Javascript!

S'il vous plaît activer Javascript! / Por favor, active Javascript!

Qing dakai JavaScript! / Qing dakai JavaScript!

Пожалуйста включите JavaScript! / Silakan aktifkan Javascript!