Cocoa [self invalidateShadow]对于向左移动的帧不起作用,但在向右移动时是否有效?

时间:2012-09-26 18:53:07

标签: objective-c xcode cocoa nswindow

我的窗口类中有一个函数,它在移动滚轮时移动它的框架

-(void)scrollWheel:(NSEvent *)theEvent{
    switch (theEvent.phase) {

        // Whilst Scrolling
        case NSEventPhaseChanged:
            float newPos = [theEvent.window.contentView frame].origin.x + [theEvent scrollingDeltaX];
            [theEvent.window.contentView setFrame: NSMakeRect(newPos, 0, 600, 600];
            [self invalidateShadow];
            [self display];
            break;
    }
}

这具有所需效果,框架完美左右移动。我无法解决两种无意识的行为。

  1. 窗口设置为[window setHasShadow:YES],我希望窗口透明,所以我最初将窗口设置为

    [window setBackgroundColor:[NSColor colorWithCalibratedWhite:0.75 alpha:0.00]];

  2. 但是在这种情况下,屏幕上没有框架的部分的手势没有注册 - 一旦我将alpha转到

    [window setBackgroundColor:[NSColor colorWithCalibratedWhite:0.75 alpha:0.05]]; 
    

    确实收到了输入。但是,如果选择了这些选项中的任何一个,则setHasShadow默认接近框架而不是实际窗口 - 这是预期的行为吗?

    1. 虽然边框在向左移动时会重新绘制边框,但是当它向右移动时它不会跟随它!?究竟有什么不同+ vs - scrollingDeltaX?

      希望有人可以提供一些见解。

0 个答案:

没有答案