2

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

-(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],我希望窗口是透明的,所以我最初将窗口设置为

    [窗口 setBackgroundColor:[NSColor colorWithCalibratedWhite:0.75 alpha:0.00]];

但是在这种情况下,没有框架的屏幕部分上的手势没有注册——一旦我把 alpha 调到

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

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

  1. 虽然向左移动时边框与框架一起重新绘制,但向右移动时却不跟随它!?+ vs - scrollingDeltaX 到底有什么不同?

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

4

0 回答 0