Necesito replicar la función de bringSubviewToFront: en el iPhone, pero estoy programando en la Mac. ¿Cómo puede hacerse esto?Versión OS X de bringSubviewToFront :?
Respuesta
en realidad no han intentado hacer esto - y puede haber mejores maneras de hacerlo - pero esto debería funcionar:
NSView* superview = [view superview];
[view removeFromSuperview];
[superview addSubview:view];
Esto moverá 'vista' a la parte delantera de sus hermanos
Las vistas de hermanos que se superponen pueden ser difíciles de hacer funcionar correctamente en AppKit: no fue compatible por mucho tiempo. Considere hacerlos CALayers en su lugar. Como beneficio adicional, puede reutilizar este código en su versión de iOS.
También asegúrese de activar la capa para la representación de cuarzo:
...
NSImageView *anImage = [[NSImageView alloc] initWithFrame:NSRectMake(0,0,512,512)];
[anImageView setWantsLayer:YES];
...
lo contrario, su capa no se puede representar correctamente.
La respuesta de Pete Rossi funciona, pero recuerda conservar la vista cuando la elimines de la supervista.
Puede agregar esto en una categoría en NSView:
-(void)bringSubviewToFront:(NSView*)view
{
[view retain];
[view removeFromSuperview];
[self addSubview:view];
[view release];
}
respuesta de Pete Rossi no funcionó para mí porque necesitaba hacer estallar la la vista al frente al arrastrar con el ratón. Sin embargo, a lo largo de las mismas líneas de la siguiente hizo el trabajo sin matar el ratón:
CALayer* superlayer = [[view layer] superlayer];
[[view layer] removeFromSuperlayer];
[superlayer addSublayer:[view layer]];
Además, la continuación presta en una subclase NSView o categoría es bastante práctico:
- (void) bringToFront {
CALayer* superlayer = [[self layer] superlayer];
[[self layer] removeFromSuperlayer];
[superlayer addSublayer:[self layer]];
}
¡Perfecto! Justo lo que necesitaba, gracias. –
Esta es la solución de Swift 3.0:
extension NSView {
public func bringToFront() {
let superlayer = self.layer?.superlayer
self.layer?.removeFromSuperlayer()
superlayer?.addSublayer(self.layer!)
}
}
- 1. ¿Cómo apuntar a una versión específica de Mac OS X?
- 2. ¿Cómo desinstalo git versión 1.6.5.1 de Mac OS X 10.5.8
- 3. bringSubviewToFront problema?
- 4. Dylibs y OS X
- 5. bringSubviewToFront para CALayer
- 6. desinstalar ipython mac os x
- 7. emacs en OS X 10.6
- 8. OS X bash: dirname
- 9. sem_init en OS X
- 10. Actualización de Ruby on Mac OS X
- 11. Gdb en Mac OS X v10.7 (Lion)
- 12. ¿Cómo instalas Intel TBB en OS X?
- 13. Cómo estática de enlaces en OS X
- 14. OS X equivalente a OutputDebugString()?
- 15. Pre-Amplify Audio OS X
- 16. Múltiples ratones en OS X
- 17. PyCharm - $ PATH en OS X
- 18. Haskell SDL en OS X
- 19. GKSession con Mac OS X
- 20. clamxav homebrew mac os x
- 21. ldconfig para Mac OS X
- 22. JNotify en Mac OS X?
- 23. xlocale roto en OS X?
- 24. Explorador abierto C++ OS X
- 25. Rich GUI OS X Frameworks?
- 26. Maven, JAVA_HOME con OS X
- 27. Mac OS X View Swapping
- 28. clang_complete con OS X marcos
- 29. XML Editor para OS X
- 30. OS X App Development Framework
Probablemente ineficiente, pero logra lo que yo quería, así que gracias. – Regan
Puede valer la pena investigar usando el método 'setSubviews:' en su lugar. – ArtOfWarfare