2011-11-15 13 views
7

Vorrei programmare uno scaffale e non voglio pensare al ridimensionamento e alla modifica delle immagini di sfondo su una rotazione e in base alla schermata (iPad/iPhone). È possibile creare un'immagine che si estenda orizzontalmente ma si ripeta in verticale? Ormai, ho trovato solo il [UIColor colorWithPatternImage:] e il [UIImage strechableImageWithLeftCapWidth:topCapHeight:] o il nuovo [UIImage resizableImageWithCapInsets:]. Ma non sono riuscito a farli lavorare insieme, ovviamente.Estensibile e Pattern UIImmagine allo stesso tempo

spero che l'illustrazione aiuta a capire il mio problema:

Illustration

Non hai idea di come realizzare quanto sopra, in modo che possa lavorare con una sola immagine per diversi formati e orientamenti? Grazie!

+0

Solo per curiosità, quale tipo di risultato ottieni per '[UIColor colorWithPatternImage: [UIImage resizableImage ...]]'? –

+0

L'immagine non è allungata o ridimensionata, semplicemente ripetuta su xey. – denbec

+0

Belle ombre sotto le riviste :) Sono disegnate o hai usato CA? – Shmidt

risposta

2

[UIColor colorWithPatternImage:] può occupare una quantità eccessiva di memoria quando si lavora con un numero elevato di righe. Ho finito per creare una singola visualizzazione dell'immagine che era una riga più grande dell'intera vista usando [UIColor colorWithPatternImage:], quindi spostare quella vista su o giù di una riga secondo necessità quando la vista stava per scorrere fuori dallo schermo. Poiché la vista viene spostata solo ai limiti delle righe, le prestazioni sono state molto migliori di quanto mi aspettassi.

Tuttavia, un'opzione migliore sarebbe quella di creare un pool di singoli UImageViews utilizzando [UIColor colorWithPatternImage:] e affiancarli, in modo simile a quanto UITableView eseguirà la tabella delle celle di visualizzazione.

Apple ha codice di esempio che illustra questa tecnica nel progetto di esempio ScrollView Suite e l'Apps Progettare con Scroll visualizzazioni video dalla WWDC 2010.

0

Perché non utilizzare un'immagine estensibile di un ripiano e quindi impostare come sfondo per ogni cella sul tableview?

EDIT:

La mia conoscenza di AQGridView è limitata, ma suona come si potrebbe ottenere l'accesso a ogni singolo 'pila della griglia'.

provare con tre immagini per riga: - L'immagine per la piastrella più griglia di sinistra per mostrare l'angolo sinistro del vostro scaffale - L'immagine per la parte centrale della piattaforma che viene applicato a tutte le tessere, tranne per la prima e l'ultima tessera - L'immagine per il riquadro più a destra della griglia per mostrare l'angolo giusto del tuo scaffale.

Inoltre, dovresti probabilmente menzionare che stai usando AQGridView nella tua domanda in modo che altri utenti non pensino che stai usando un UITableView.

+0

perché sto usando le celle della griglia [AQGridView] (https://github.com/AlanQuatermain/AQGridView) e non le righe ... :( – denbec

3

Avevo anche bisogno di impostare lo sfondo di UIView dall'immagine e modificarne le dimensioni allo stesso tempo. Quello che ho fatto è stato:

  1. immagine creata nel quadro di mia taglia vista
  2. Set vista sfondo utilizzando [UIColor colorWithPatternImage:(UIImage*)]

Ed ecco il codice:

UIGraphicsBeginImageContext(self.followView.frame.size); 
[[UIImage imageNamed:@"background_content.png"] drawInRect:self.followView.bounds]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
UIColor *bgColor = [UIColor colorWithPatternImage:image]; 

[followView setBackgroundColor:bgColor]; 
Problemi correlati