Sto costruendo una griglia di immagini e inizio in cima, creando oggetti UIImageView dappertutto. Ora voglio che si sovrappongano un po ', ma gli ultimi che disegno sono quelli più in alto. Mi piacerebbe impostare la posizione z a livello di programmazione, in modo che i primi che disegno siano quelli più in alto.C'è un modo per impostare una sorta di z-index per la posizione z degli oggetti UIImageView?
risposta
Lei ha detto che hai utilizzato UIImageView. Disegnare un'immagine con UIImageView significa inizializzarlo e quindi aggiungerlo a una vista contenitore.
Non puoi semplicemente utilizzare questo codice nel tuo ciclo?
[containerView insertSubview:image atIndex:[[containerView subviews] count]]
Il risultato sarebbe che la vista aggiunto prima è in cima alla pila vista (non sono stato in grado di testare questo ancora però :))
Non direttamente.
Una soluzione avrebbe dato i UIViews una proprietà z-index; un numero intero che definisce il tuo livello di profondità. Quindi puoi itterare attraverso un NSArray (myArray) contenente le UIViews aggiungendole come subviews in ordine di profondità.
In realtà, per quanto ne so, non esiste una proprietà posizione di z-index per questo. Il disegno nella vista utilizza un modello di disegno semplice.
È possibile inserire la logica nel ciclo di disegno (es. Disegnare le cose che si desidera per ultimo) oppure utilizzare Cocoa Animation, poiché a differenza di UIImageView, i CALayer hanno profondità (sono una proiezione 2D di uno spazio 3D). Vedi here per un riferimento.
Sì, ho pensato ogni UIImageView è una specie di basa su un CALayer? – Thanks
Sì, vieni a pensarci, nell'iPhone tutte le viste sono supportate da livelli. Scavando un po ', ho trovato i seguenti metodi nei documenti UIImageView: - insertSubview: aboveSubview: - insertSubview: belowSubview: – Hejazzman
invece di utilizzare insertSubiew voi può provare:
- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view
Questa tecnica funziona bene per una situazione in cui si aggiunge un'immagine (o altra vista) a livello di programmazione e si desidera spostarla sullo sfondo. Nel mio caso ho impostato alcune etichette in Interface Builder, ma aggiungo un'immagine di sfondo estensibile nel codice. Senza usare sendSubviewToBack :, l'immagine di sfondo appare sopra le etichette. –
Si potrebbe davvero prendere in considerazione l'utilizzo di CALayer invece di un sacco di oggetti UIImageView. Gli oggetti UIImageView sono fantastici ma per i disegni intensi i CALayer sono più leggeri e più efficienti (anche se è necessario che un utente interagisca con le immagini, un oggetto vista è migliore). Dipende davvero da cosa stai facendo. I CALayer hanno una proprietà zPosition. Questo è ciò che Uikit usa quando organizza la posizione di UIView nello stack di visualizzazione.
Ho avuto lo stesso problema. Avevo bisogno dell'elemento subview con lo z-index più alto e più basso. Dalla mia verifica ho scoperto che UIKit dispone gli elementi nella proprietà submviews in base alla loro posizione z. Ad esempio, se si prende [self.scrollview subviews]
. Il primo elemento dell'array è la sottoview che si trova nella parte posteriore. L'elemento dell'array con l'indice più alto è la sottoview in primo piano. Se si utilizza
- (void)bringSubviewToFront:(UIView *)view
- (void)sendSubviewToBack:(UIView *)view`
la matrice di sottoview verrà riordinata di conseguenza.
Se avete l'arbitro alla vista sotto/sopra è necessario aggiungere la vista secondaria è possibile utilizzare il seguente
[self.view insertSubview:<#(UIView *)#> belowSubview:<#(UIView *)#>];
[self.view insertSubview:<#(UIView *)#> aboveSubview:<#(UIView *)#>];
imageView.layer.zPosition = 100;
https://stackoverflow.com/a/4631895/2482283
È possibile utilizzare la proprietà zPosition del view's layer (è un oggetto CALayer) per cambiare l'indice z della vista.
theView.layer.zPosition = 1;
Come Viktor Nordling ha aggiunto, "i grandi valori sono in cima. È possibile utilizzare qualsiasi valori desiderati, inclusi i valori negativi." Il valore predefinito è 0.
È necessario importare il framework QuartzCore per accedere al livello. Basta aggiungere questa riga di codice nella parte superiore del file di implementazione.
#import "QuartzCore/QuartzCore.h"
altro modo (https://stackoverflow.com/a/4663526/2482283), è possibile anche utilizzare UIViews metodo:
@property(nonatomic,readonly) UIView *superview;
@property(nonatomic,readonly,copy) NSArray *subviews;
- (void)removeFromSuperview;
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;
- (void)addSubview:(UIView *)view;
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
- (void)bringSubviewToFront:(UIView *)view;
- (void)sendSubviewToBack:(UIView *)view;
- 1. Influenza dell'ordine Z per UIImageView
- 2. Posizione z diversa per gli oggetti ListView
- 3. modo pitone per indicizzare l'elenco degli oggetti
- 4. Mostra per impostare la posizione del popup?
- 5. cambia posizione di UIImageView
- 6. impostare la posizione dinamica di Toast per una visualizzazione
- 7. sorta bash per la risoluzione
- 8. Disporre (z) l'ordine degli oggetti in Flash con ActionScript 3?
- 9. Suggerimenti per la serializzazione degli oggetti Java
- 10. C'è un modo per cambiare la posizione di .vagrand.d (la posizione delle scatole vagabonde)?
- 11. Impostare la posizione assoluta di una vista
- 12. Perché lo z-index viene ignorato con la posizione: statica?
- 13. UIImageView ottenere la posizione della rappresentazione Immagine
- 14. C'è un modo per cambiare la posizione iniziale predefinita dell'emulatore?
- 15. Come impostare un ordine Z di un controllo utilizzando WinForms
- 16. Il modo più semplice per ordinare l'elenco degli oggetti
- 17. Insetti per UIImageView?
- 18. È possibile impostare la chiave degli oggetti django-tastypie?
- 19. Come impostare la posizione per la foto acquisita usando UIImagePickerController?
- 20. Impossibile impostare la posizione di un contextmenustrip?
- 21. Come ordinare una matrice di oggetti per un attributo degli oggetti?
- 22. C'è un modo per impostare l'ordine z nel livello vista annotazione?
- 23. C'è un modo per ottenere la posizione di un utente tocco mentre si preme UIButton?
- 24. Esiste un modo per impedire la sostituzione delle proprietà degli oggetti JavaScript?
- 25. javascript sorta di matrice raddoppiare sorta
- 26. Symfony2 sorta collezione di oggetti da una proprietà
- 27. Confronto di una posizione UITouch con UIImageView rettangolo
- 28. Proporzioni di autolayout per UIImageView/UIView
- 29. IOS: ruotare un UIImageView
- 30. Arresta utente per impostare posizione su RecyclerView
cosa accadrebbe se tutti avessero lo stesso indice? – Thanks
Bene, non possono aggiungere un indice att per 0 per un esempio, facendo un salto verso il basso tutti gli altri nello stack. – ullmark