transparente View und Schlagschatten

  • transparente View und Schlagschatten

    Hallo,

    ich hab ne CustonView (siehe Foto) auf der sich "Items" rumschieben lassen. Die soll am besten transparent sein, ist sie auch. Nur bleibt ein Loch im Schlagschatten des Fensters zurück, wenn Items verschiebe. Das Loch verschwindet, wenn sich das Window neu zeichnet - ich kann aber nicht beim zeichnen meiner view, bessergesagt beim rumschieben jedesmal das Window neu zeichnen.

    Hat da einer ne Idee?

    Danke Manfred
    Seminare, Artikel, Code. ObjectiveCeeds - alles für die Apfelzucht.
  • Quellcode

    1. -(void)mouseDragged:(NSEvent *)event
    2. {
    3. //NSLog (@"Dragged");
    4. NSPoint newMousePosition=[self convertPoint:[event locationInWindow]fromView:nil];
    5. //WLLogPoint(newMousePosition);
    6. // determine dragging an item
    7. if ([event modifierFlags] & NSAlternateKeyMask) {
    8. NSLog (@"ChangeParent %@",_selectedItems);
    9. if ([_selectedItems count] > 0 && [_selectedItems count] < 2) {
    10. WLDragItem *selectedItem = [_selectedItems objectAtIndex:0];
    11. //NSString *imgName = [selectedItem imageName];
    12. NSImage *image = [[WLDragViewIconServer sharedService]imageWithName:@"edit-undo.png" andSize:WLDragViewImageSizeBig];
    13. NSPasteboard *pb = [NSPasteboard pasteboardWithName:NSDragPboard];
    14. //[self writeStr
    15. [self dragImage:image
    16. at:newMousePosition
    17. offset:NSMakeSize(0,0)
    18. event:event
    19. pasteboard:pb
    20. source:selectedItem
    21. slideBack:YES];
    22. }
    23. return;
    24. }
    25. if (!_fireScrolling) {
    26. _fireScrolling = [[NSTimer scheduledTimerWithTimeInterval:0.08 target:self selector:@selector (handleAutoscroll) userInfo:nil repeats:YES]retain];
    27. }
    28. if (_mode == WLDragViewModeDrag) {
    29. [self moveSelectedItems:subtractPoints( newMousePosition, _storedMousePosition)];
    30. }
    31. if (_mode == WLDragViewModeResize) {
    32. [[_selectedItems objectAtIndex:0]addDifferenceToSize:subtractPoints( newMousePosition, _storedMousePosition)];
    33. }
    34. if (_mode == WLDragViewModeAreaselector) {
    35. NSPoint diff = subtractPoints( newMousePosition, _storedMousePosition);
    36. _selectionRect.size.width = _selectionRect.size.width + diff.x;
    37. _selectionRect.size.height = _selectionRect.size.height + diff.y;
    38. }
    39. _storedMousePosition = newMousePosition;
    40. [self display];
    41. }
    Alles anzeigen

    Ist die modal oder unmodal?

    Versteh ich nicht
    Seminare, Artikel, Code. ObjectiveCeeds - alles für die Apfelzucht.
  • RE: transparente View und Schlagschatten

    Hallo,

    du must an dein Window invalidateShadow schicken, also so

    [[myView window] invalidateShadow]

    am besten in deiner draw Methode, aber beachte der Aufruf ist recht teuer. Du solltest dir eine eine BOOL Variable wie mShadowInvalid speichern und in drawRect nur dann aufrufen wenn es wirklich nötig ist. Am besten gleich nocht auf liveResize testen.

    also:

    -(void)drawRect:(NSRect)rect
    {
    ......
    dein drawing code
    .......

    if (mShadowInvalid && ![self inLiveResize]){
    [[self window] invalidateShadow];
    mShadowInvalid = NO;
    }

    }