Comment puis-je faire le dessin de finition avant NSCollectionView la vue contenant elle est rendue visible?

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

  •  28-09-2019
  •  | 
  •  

Question

Je suis en train de nettoyer l'interface utilisateur sur ma demande (construite pour 10,5) et une chose qui est plutôt ennuyeux est que lorsque j'échange à la bibliothèque, je recharger le contenu et la nscollectionview qui affiche les éléments se efface l'ancien contenu sur avant de disparaître les nouvelles. Je ne me dérange pas le fade in / out des anciens / nouveaux éléments, mais la façon dont je l'ai programmé l'échangisme vue devrait rendre la bibliothèque reload se produire avant l'NSView qui contient le nscollectionview est inséré dans la fenêtre principale.

Tout le monde a eu ce genre de problème avant?

Voici une version abrégée de la façon dont l'échange entre les différentes parties de l'application à la bibliothèque va:

Dans le contrôleur 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]];
}

Dans le contrôleur de bibliothèque:

-(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];   
}
Était-ce utile?

La solution

La question n'est pas que la vue de la collecte n'a pas fini dessin, il est qu'il anime l'ajout et la suppression des sous-vues. Il peut être possible de créer une transaction que les actions de la couche de désactive pendant que vous rechargeant le contenu de la vue de la collection. Listing 2 (désactiver temporairement les actions d'une couche) montre comment faire. Je ne l'ai pas testé, donc je ne sais pas si cela va faire ce que vous voulez, mais c'est là que je commencerais.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top