¿Cómo puedo hacer NSCollectionView dibujo de meta antes de la vista que contiene se hace visible?

StackOverflow https://stackoverflow.com/questions/3060238

  •  28-09-2019
  •  | 
  •  

Pregunta

Estoy tratando de limpiar la interfaz de usuario en mi solicitud (construido para 10.5) y una cosa que es bastante molesto es que cuando SWAP para la biblioteca vuelvo a cargar el contenido y la nscollectionview que muestra los elementos se desvanece el contenido de edad a cabo antes de desaparecer en los nuevos. no me importa el fundido de entrada / salida de los elementos antiguos / nuevos, pero la forma en que he programado la vista intercambio debe hacer la recarga biblioteca suceder antes de que el del NSView que contiene el nscollectionview se inserta en la ventana principal.

Cualquier persona tenía este tipo de problema antes?

Esta es una versión abreviada de cómo va el intercambio entre las diferentes partes de la aplicación a la biblioteca:

En el controlador principal:

-(void)setMainPaneToLibrary {
    if(viewState == VIEW_STATE_LIBRARY)
        return;
    [libraryController refreshDevices:self];
    [libraryController refreshLibraryContents];

    [menuController setSelectionToIndex:0];
    viewState = VIEW_STATE_LIBRARY;

    [self removeSubview]; //clear the area
    [mainPane addSubview:[libraryController view]];
}

En el controlador de biblioteca:

-(void)refreshLibraryContents {
    [self loadLibraryContents:[rootDir stringByAppendingPathComponent:currentDir]];
}

-(void)loadLibraryContents:(NSString *)folderToLoad {

    int i;
    int currentSelection = [libraryArrayController selectionIndex]; //used to preserve selection and smooth folder changing

    [libraryArrayController setContent:nil];

    //expand the path to load
    folderToLoad = [folderToLoad stringByExpandingTildeInPath];

    NSFileManager * fileManager = [NSFileManager defaultManager]; 
    //load the files in the folder
    NSArray * contents = [fileManager directoryContentsAtPath:folderToLoad];

    //create two seperate arrays for actual files and folders - allows us to add them in order
    NSMutableArray * directories = [[NSMutableArray alloc] init];
    NSMutableArray * musicFiles = [[NSMutableArray alloc] init];

//... a load of stuff filling the file arrays ...

    for(i=0;i<[directories count];i++) {
    [libraryArrayController addObject:[directories objectAtIndex:i]];
    }
    for(i=0;i<[musicFiles count];i++) {
    [libraryArrayController addObject:[musicFiles objectAtIndex:i]];
    }

    if(currentSelection >= 0) {
    [libraryArrayController setSelectionIndex:currentSelection];
    }

    [directories release];
    [musicFiles release];   
}
¿Fue útil?

Solución

El problema no es que la vista de colección tiene el dibujo no ha terminado, es que anima la adición y la eliminación de los subvistas. Puede ser posible crear una transacción que las acciones de capa desactiva mientras se está recargando el contenido de la vista de colección. Listado 2 (desactivación temporal de las acciones de una capa) muestra cómo hacer esto. No he probado esto, así que no sé si esto va a hacer lo que quiere, pero aquí es donde me gustaría empezar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top