Ho bisogno di replicare la funzione di bringSubviewToFront: su iPhone, ma sto programmando su Mac. Come si può fare?Versione OS X di bringSubviewToFront :?
risposta
Non hanno effettivamente provato questo fuori - e ci possono essere modi migliori per farlo - ma questo dovrebbe funzionare:
NSView* superview = [view superview];
[view removeFromSuperview];
[superview addSubview:view];
Questo sposterà 'view' verso la parte anteriore dei suoi fratelli
Le visualizzazioni di pari livello che si sovrappongono possono essere difficili da eseguire correttamente in AppKit: non sono state supportate completamente per molto tempo. Considera invece di renderli calandrini. Come bonus, potresti essere in grado di riutilizzare questo codice nella tua versione iOS.
anche essere sicuri di abilitare il livello per il rendering di quarzo:
...
NSImageView *anImage = [[NSImageView alloc] initWithFrame:NSRectMake(0,0,512,512)];
[anImageView setWantsLayer:YES];
...
in caso contrario, il tuo livello non può essere reso in modo corretto.
La risposta di Pete Rossi funziona, ma ricorda di mantenere il punto di vista quando lo rimuovi dalla superview.
È possibile aggiungere questo in una categoria sulla NSView:
-(void)bringSubviewToFront:(NSView*)view
{
[view retain];
[view removeFromSuperview];
[self addSubview:view];
[view release];
}
risposta di Pete Rossi non ha funzionato per me perché avevo bisogno di pop la vista in avanti durante il trascinamento con il mouse. Tuttavia, lungo le stesse linee di seguito ha funzionato senza uccidere il mouse:
CALayer* superlayer = [[view layer] superlayer];
[[view layer] removeFromSuperlayer];
[superlayer addSublayer:[view layer]];
Inoltre, i seguenti posti in una sottoclasse NSView o categoria è piuttosto comodo:
- (void) bringToFront {
CALayer* superlayer = [[self layer] superlayer];
[[self layer] removeFromSuperlayer];
[superlayer addSublayer:[self layer]];
}
Perfetto! Proprio quello di cui avevo bisogno, grazie. –
Questo è Swift soluzione 3.0:
extension NSView {
public func bringToFront() {
let superlayer = self.layer?.superlayer
self.layer?.removeFromSuperlayer()
superlayer?.addSublayer(self.layer!)
}
}
- 1. versione di compatibilità di libcurl dylib per Mac OS X
- 2. bringSubviewToFront problema?
- 3. Di fronte a bringSubviewToFront?
- 4. C macro per rilevamento OS X versione (Lion o no)?
- 5. Versione Python in dotazione con Mac OS X Snow Leopard?
- 6. Come specificare obiettivo Mac OS X versione utilizzando qmake
- 7. Come ottenere la versione del sistema OS X?
- 8. Swift bringSubViewToFront non funziona
- 9. HsOpenSSL segfaults su OS X
- 10. Numpy-MKL per OS X
- 11. emacs su OS X 10.6
- 12. OS X bash: dirname
- 13. OS X clang -pthread
- 14. sem_init su OS X
- 15. installazione di openssl su OS X
- 16. Symbol X OS X Crash Log Symbol
- 17. OS X il check-in Cocoa
- 18. Dati sul numero di utenti di ciascuna versione di Mac OS X?
- 19. Gdb su Mac OS X v10.7 (Lion)
- 20. Quale versione di Mac OS X includeva le autorizzazioni di eccezione temporanee per la prima volta?
- 21. Come posso scoprire quale versione di Perl era disponibile nelle versioni precedenti di Mac OS X?
- 22. Installazione di dateutils su OS X. Come posso installare su una versione diversa di Python
- 23. Privilegi Escalate programmaticamente OS X
- 24. SetWindowsHookEx per Mac OS X?
- 25. ldconfig per Mac OS X
- 26. PyCharm - $ PATH su OS X
- 27. Pre-Amplify Audio OS X
- 28. ID C++ per OS X
- 29. Mouse multipli su OS X
- 30. xlocale rotto su OS X?
Probabilmente inefficiente, ma realizza ciò che volevo, quindi grazie. – Regan
Potrebbe valere la pena di investigare usando il metodo 'setSubviews:'. – ArtOfWarfare