Come posso fare disegno finitura NSCollectionView prima che la vista che lo contiene è fatta visibile?

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

  •  28-09-2019
  •  | 
  •  

Domanda

Sto cercando di ripulire l'interfaccia utente relativa alla mia domanda (costruita per 10.5) e una cosa che è piuttosto fastidioso è che quando ho SWAP per la biblioteca ricarico i contenuti e la nscollectionview che visualizza le voci si affievolisce il contenuto vecchio fuori prima di svanire quelli nuovi in. non mi dispiace la dissolvenza in / out di elementi vecchio / nuovo, ma il modo in cui ho programmato lo scambio vista dovrebbe rendere la ricarica biblioteca accadere prima della della NSView che contiene il nscollectionview viene inserito la finestra principale.

Chiunque ha avuto questo tipo di problema prima?

Ecco una versione ridotta di come lo scambio tra le diverse parti dell'applicazione alla libreria va:

Nel controller principale:

-(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]];
}

Nel controller della libreria:

-(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];   
}
È stato utile?

Soluzione

Il problema non è che la vista collezione ha disegno non finito, è che anima l'aggiunta e la rimozione dei subviews. Potrebbe essere possibile creare una transazione che le azioni disabili strato, mentre si sta ricaricando il contenuto della vista di raccolta. Listato 2 (disattivare temporaneamente le azioni di un livello) mostra come fare questo. Non ho ancora testato questo, quindi non so se questo sarà fare quello che vuoi, ma questo è dove mi piacerebbe iniziare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top