Salutations,sous-classe NSCollectionView ne remet pas drawRect lors de la session de glisser malgré setNeedsDisplay
Je suis perplexe quant à savoir quand et comment drawRect est censé être appelé dans une sous-classe NSCollectionView .
je mets en œuvre glisser-déposer opération afin de se déplacer NSCollectionViewItems dans la collection, et je voudrais dessiner une indication visuelle de mettrait fin à la baisse.
La sous-classe n'appelle pas drawRect pendant la session de déplacement. (Cela se fait pendant le défilement)
Est-ce l'opération prévue? Toute indication sur la manière d'implémenter correctement ce comportement est la bienvenue.
Un projet complet Xcode du code ci-dessous est disponible à l'adresse: http://babouk.ovh.org/dload/MyCollectionView.zip
Meilleures salutations
Mise à jour: Le code exemple est erroné. Un appel à registerForDraggedTypes, rend la collection triggerRect comme prévu.
Exemple de code:
@interface CollectionViewAppDelegate : NSObject <NSApplicationDelegate>
{
NSWindow *window;
NSMutableArray *collectionContent;
}
/* properties declaration */
/* KVC compliance declarations */
@end
@interface MyCollectionView : NSCollectionView
@end
@interface ItemModel
{
NSString *name;
}
@property (copy) NSString *name;
@end
@implementation MyCollectionView
- (void)awakeFromNib {
[self registerForDraggedTypes:[NSArray arrayWithObjects:NSStringPboardType, nil]];
}
- (void)drawRect:(NSRect)rect {
NSLog(@"DrawRect");
}
- (void)mouseDragged:(NSEvent *)aEvent {
NSPoint localPoint = [self convertPoint:[aEvent locationInWindow] fromView:nil];
[self dragImage:[NSImage imageNamed:@"Move.png"]
at:localPoint
offset:NSZeroSize
event:aEvent
pasteboard:nil
source:self
slideBack:NO];
}
- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender {
return YES;
}
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
return NSDragOperationEvery;
}
- (NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender {
[self setNeedsDisplay:YES];
return NSDragOperationEvery;
}
- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal {
return NSDragOperationEvery;
}
- (void)mouseDown:(NSEvent *)theEvent {
}
@end
@implementation CollectionViewAppDelegate
@synthesize window, collectionContent, collectionView;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSMutableArray *data = [[NSMutableArray alloc] init];
/* Fill in data */
[self setCollectionContent:data];
[data release];
}
/* dealloc */
/* KVC implementation */
@end
@implementation ItemModel
@synthesize name;
/* dealloc */
@end
Merci pour votre réponse, vous avez raison. Cependant, drawRect est appelé comme attendu dans l'exemple, après avoir corrigé un appel manquant dans registerForDraggedTypes. Le problème est toujours présent dans mon application en taille réelle. Je continue d'enquêter. –