2011-03-09 16 views
8

He creado una subclase NSScroller pulida, pero no puedo imaginar cómo superponerla en la parte superior de la NSScrollView en lugar de empujar la documentView a un lado.NSScrollview y transparente, subcapas NSScroller superpuestas

enter image description here

Aquí se puede ver el fondo de un NSCollectionView que deseo hacer 100% de ancho, y tienen la sentada rueda de desplazamiento a lo largo de la parte superior. Actualmente, tengo que establecer un fondo blanco para el desplazamiento porque el dibujo con un clearColor no se muestra como transparente, sino como negro.

¿Voy por esto de la manera incorrecta? ¿Me estoy perdiendo algo obvio aquí? ¿Cómo puedo lograr el comportamiento de un NSScroller de seguimiento transparente que se encuentra en la parte superior de los contenidos de NSScrollView?

Respuesta

8

que era capaz de conseguir el posicionamiento mediante la implementación de tile en la subclase DE NSSCROLLVIEW

- (void)tile { 
    [super tile]; 
    [[self contentView] setFrame:[self bounds]]; 
} 

Y resulta que intentar sacar el color claro era el problema, para empezar. En la subclase desplazador, sólo omitió cualquier dibujo que tenía que ver con la pista deslizante completamente reemplazando DRAWRECT: DE LA NSSCROLLER subclase, así:

- (void)drawRect:(NSRect)dirtyRect 
{ 
    [self drawKnob]; 
} 

enter image description here

+1

¡Gracias por mencionar cómo deshacerse del dibujo que tenía que ver con la pista! Estaba tratando de establecerlo en un color claro, pero estaba estropeando todo. Lo eliminó y todo está bien! ¡Gracias! –

-1

Qué hay sobre este color: [NSColor colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:0.0] Creo que tiene que modificar los tamaños con el constructor de interfaz.

+0

clearColor es el mismo. El problema no está en los tamaños, sino en el comportamiento de NSScroller. El comportamiento estándar es empujar el contenido hacia un lado y dibujar la barra, quiero que el contenido no se ponga a un lado, y la barra dibuje hacia arriba. – coneybeare

1

Tenga en cuenta que para que esto funcione correctamente, ¡DEBE habilitar la capa de respaldo para scrollView!

Es decir, llamar a:

[scrollViewInstance setWantsLayer:YES]; 

o ponerlo en Interface Builder.

Si no hace esto, el contentView de scrollView dibujará ON TOP OF de los scrollers. Además: debe tener en cuenta que lo que está haciendo es superponer dos NSViews (NSScroller encima de NSScrollView, ambos heredan de NSView). A diferencia de UIViews en iOS, la superposición de NSViews en OS X no cuenta con el respaldo oficial de ninguna versión actual del sistema operativo (10.6 hacia abajo). Activar CALayers parece hacer que funcione, pero aún es algo a tener en cuenta. Por supuesto, encender las capas puede matar seriamente el rendimiento del dibujo.

ver este SO pregunta para más detalles: Is there a proper way to handle overlapping NSView siblings?

+0

Esto solucionó un problema extraño que estaba teniendo con mi propia barra de desplazamiento transparente: a veces parpadeaba en blanco cuando aparecía por primera vez, luego dibujaba correctamente uno o dos segundos más tarde. – robotspacer

Cuestiones relacionadas