-setNeedsDisplay: Mondphasenabhängigkeit

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • -setNeedsDisplay: Mondphasenabhängigkeit

    Ja, ich weiß, das Thema wurde schon 7808108972348912309x durchgekaut. Und ich habe es immer noch nicht verstanden.

    Folgende Situation, es handelt sich um den Versuch das NSDraggingSource Protokoll korrekt zu bedienen:

    C-Quellcode

    1. // 1st
    2. - (void)draggingSession:(NSDraggingSession *)session willBeginAtPoint:(NSPoint)screenPoint
    3. {
    4. CMAnnotationView * myView = [[self annotationViews] objectForKey:[self draggedAnnotation]];
    5. [myView setCurrentDragStatus:CMAnnotationDragLifting];
    6. [self setNeedsDisplay:YES];
    7. NSLog(@"hier nicht notwendig.");
    8. }
    9. // 3rd
    10. - (void)draggingSession:(NSDraggingSession *)session movedToPoint:(NSPoint)screenPoint
    11. {
    12. NSPoint recalculatedPoint = [self recalculateScreenPoint:screenPoint];
    13. [[[self annotationViews] objectForKey:[self draggedAnnotation]] setCoordinate:recalculatedPoint];
    14. CMAnnotationView * myView = [[self annotationViews] objectForKey:[self draggedAnnotation]];
    15. [myView setCurrentDragStatus:CMAnnotationDragDragging];
    16. [self setNeedsDisplay:YES];
    17. NSLog(@"hier notwendig.");
    18. }
    19. // 4th
    20. - (void)draggingSession:(NSDraggingSession *)session endedAtPoint:(NSPoint)screenPoint operation:(NSDragOperation)operation
    21. {
    22. CMAnnotationView * myView = [[self annotationViews] objectForKey:[self draggedAnnotation]];
    23. [myView setCurrentDragStatus:CMAnnotationDragPinned];
    24. [self setNeedsDisplay:YES];
    25. NSLog(@"braucht hier kein mensch.");
    26. [self setDraggedAnnotation:nil];
    27. }
    28. // 3rd b
    29. - (BOOL)ignoreModifierKeysForDraggingSession:(NSDraggingSession *)session
    30. {
    31. return YES;
    32. }
    Alles anzeigen


    Sowohl -setCoordinate: als auch -setCurrentDragStatus: feuern am Ende ein -setNeedsDisplay: auf das beinhaltende Subview.
    Vorsorglich habe ich das mit einer Ausgabe 'It changed.' versehen.

    Die Logausgaben sind auch recht eindeutig:
    2012-07-17 16:51:11.185 DemoApplications[4973:503] [DEBUG] No delegate is set.
    2012-07-17 16:51:16.607 DemoApplications[4973:503] It changed.
    2012-07-17 16:51:16.607 DemoApplications[4973:503] hier nicht notwendig.
    2012-07-17 16:51:16.764 DemoApplications[4973:503] It changed.
    2012-07-17 16:51:16.764 DemoApplications[4973:503] hier notwendig.
    2012-07-17 16:51:16.797 DemoApplications[4973:503] hier notwendig.
    .
    .
    .
    2012-07-17 16:51:17.562 DemoApplications[4973:503] hier notwendig.
    2012-07-17 16:51:18.427 DemoApplications[4973:503] hier notwendig.
    2012-07-17 16:51:18.981 DemoApplications[4973:503] It changed.
    2012-07-17 16:51:18.982 DemoApplications[4973:503] braucht hier kein mensch.


    Man kann das zu beobachtende Verhalten dem Log entnehmen:
    Beginnt der Drag, soll der dragStatus auf 'lifted' angepasst werden: die Annotation schwebt 10px über dem Erdboden.
    (Später wird's vielleicht mal ne Animation, so mit aus dem Boden reißen, kiloweise Erde rumschmeißen, hektoliter Erdöl vergießen und so weiter.)
    Das passiert gefühlt nie. Tatsächlich kann ich mir die Leertaste zur Hilfe nehmen.
    Sobald ich die Maus bewege und das Dragging einsetzt, schwebt die Annotation und folgt ganz brav dem Mauszeiger.
    Lasse ich die Maustaste los, dann schwebt die Annotation noch für eine variable Zeit x in der Gegend rum und ist dann irgendwann unten.
    Die variable Zeit x lässt sich reduzieren, in dem der Scrollbalken betätigt wird, ich das View verlasse und zurückkehre oder ich wieder auf die Leertaste ausweiche.

    Entgegen der Aussage des Logs ist es aber sowohl hier notwendig als auch von einem Menschen gebraucht.

    Welche Möglichkeiten habe ich, um dieses Problem der ignorierten -setNeedsDisplay: zu lösen?
    Auf [self drawInRect:[self frame]]; habe ich allerdings nur bedingt Lust, ein sauberer Weg ist mir lieber. ;)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P