Creare una immagine a partire da una mappa

Le funzioni di Quartz sono veramente molto utili perché ci permettono di creare delle immagini e inserirle nell’interfaccia in maniera molto semplice ed efficace. Se però dobbiamo fare il passaggio inverso, ovvero ottenere una immagine a partire dall’interfaccia, come dobbiamo procedere?

In realtà questo è ancora più semplice e, se ad esempio stiamo parlando di un mapView , possiamo usare il seguente codice:

1
2
3
4
UIGraphicsBeginImageContextWithOptions(mapView.bounds.size, NO, 0.0f);
    [mapView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *mapImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
UIGraphicsBeginImageContextWithOptions(mapView.bounds.size, NO, 0.0f);
    [mapView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *mapImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

dove assegnamo al contex il render di un layer, e poi usiamo il contex per generare una UIImage. Tutto molto semplice.

Modificare l’icona e il titolo di un elemento di TabBar

Nel caso servisse impostare o modificare via codice il titolo e l’immagine di un elemento di una TabBar, sarà sufficiente sostituire al tabBarItem del ViewController attuale con un tabBarItem allocato e inizializzato sul momento.

Ecco come:

1
2
3
4
yourViewController.tabBarItem = [[UITabBarItem alloc]
initWithTitle:NSLocalizedString(@"Name", @"Name")
image:[UIImage imageNamed:@"tab_ yourViewController.png"]
tag:3];
yourViewController.tabBarItem = [[UITabBarItem alloc]
initWithTitle:NSLocalizedString(@"Name", @"Name")
image:[UIImage imageNamed:@"tab_ yourViewController.png"]
tag:3];

L’esempio è tratto da una risposta su stackoverflow.

Se all’apertura di questo ViewController dovessimo settare il titolo anche di tutti gli altri allora bisogna usare la property viewControllers del tabBarController dell’AppDelegate: l’unico che conosce tutta la struttura dell’app.

Prelevato dall’array viewControllers l’elemento voluto, sarà sufficiente chiamare settile per impostare il nuovo titolo dell’elemento della TabBar.