События не работают в NSView в прозрачном NSWindow - PullRequest
0 голосов
/ 11 февраля 2011

Я использовал этот код ...

static const CGFloat kSwipeGestureLeft  =  1.0;
static const CGFloat kSwipeGestureRight = -1.0;
static const CGFloat kSwipeGestureUp    =  1.0;
static const CGFloat kSwipeGestureDown  = -1.0;

- (void)swipeWithEvent:(NSEvent *)event {

    if ([event deltaX] == kSwipeGestureLeft) {

        NSLog(@"LEFT SWIPE!");
    } 
    else if ([event deltaX] == kSwipeGestureRight) {

        NSLog(@"RIGHT SWIPE!");
    } 
    else if ([event deltaY] == kSwipeGestureUp) {

        NSLog(@"UP SWIPE!");
    } 
    else if ([event deltaY] == kSwipeGestureDown) {

        NSLog(@"DOWN SWIPE!");
    } 
    else {
        [super swipeWithEvent:event];
    }
}

в NSView , который был отправлен обратно в Интерфейсный Разработчик , внутри окна , которое я сделал частично прозрачным через код . Однако , он ** работает только в непрозрачном окне, а не в прозрачном.

Почему?Как я могу это исправить?Если я не могу этого сделать, то все равно могу, например, сделать снимок всего экрана, а затем установить его (слегка затемненный) в качестве фона окна?

Я попытался создать подкласс NSWindow ** и поместить этов, но все еще не работал.

Код, который я использую, на самом деле не делает окно прозрачным, просто измените его цвет фона на прозрачный:

    //Set up the window

[window setLevel:kCGNormalWindowLevel];
[window setOpaque:NO];
[window setStyleMask:0];
[window setBackgroundColor:[NSColor colorWithCalibratedWhite:0.0 alpha:0.3]];
[window setAlphaValue:0];


    //Resize the window to fill the screen

[window
 setFrame:[window frameRectForContentRect:[[window screen] frame]]
 display:YES
 animate:YES];

    //Fade the window in

[window makeKeyAndOrderFront:self];
[[window animator] setAlphaValue:1.0]; 

Ответы [ 3 ]

0 голосов
/ 20 февраля 2011

Вы используете UIGestureRecognizer?Кажется, это самый простой способ для использования на данный момент:)

0 голосов
/ 21 февраля 2011

Не устанавливайте альфа на 0, установите вместо него какое-то низкое значение, например 0,01. События игнорируются для полностью прозрачных представлений.

0 голосов
/ 19 февраля 2011

Убедитесь, что ваше окно на самом деле является ключевым окном.То есть не думайте, что makeKeyAndOrderFront удалось сделать ваше окно ключевым окном.Подробности смотрите в методе - [NSWindow canBecomeKeyWindow] (возможно, вам придется переопределить его, чтобы ваше пользовательское окно вернуло YES).Я сталкивался с этой проблемой в прошлом для окон, у которых нет строки заголовка, но не уверен, что вы столкнулись с той же (или похожей) проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...