Как интерпретировать жесты при нажатии трекпада для увеличения IKImageBrowserView - PullRequest
7 голосов
/ 27 ноября 2009

У меня есть IKImageBrowserView, который я хочу иметь возможность масштабирования при помощи мультитач трекпада на недавнем ноутбуке Mac.

Руководство по обработке событий Какао, в разделе Обработка событий жестов гласит:

Метод доступа к увеличению возвращает значение с плавающей запятой (CGFloat), представляющее коэффициент увеличения

.. и продолжает показывать код, который регулирует размер представления путем умножения высоты и ширины на magnification + 1.0.

Похоже, это неправильный подход для масштабирования IKImageBrowserView, свойство zoomValue которого ограничено от 0,0 до 1,0.

Итак, кто-нибудь знает, как интерпретировать событие в -[NSResponder magnifyWithEvent:] для увеличения IKImageBrowserView?

Ответы [ 2 ]

15 голосов
/ 28 ноября 2009

Это то, что я делаю, на Snow Leopard работает отлично:

В 10.6, NSEvent имеет метод «увеличения», который вернет нужное количество уже. Все, что вам нужно сделать, это добавить это к старому значению, например [imageBrowser zoomValue]+[event magnification].

- (void)magnifyWithEvent:(NSEvent *)event
{
    if ([event magnification] > 0)
    {
        if ([self zoomValue] < 1)
        {
            [self setZoomValue:[self zoomValue] + [event magnification]];
        }
    }
    else if ([event magnification] < 0)
    {
        if ([self zoomValue] + [event magnification] > 0.45)
        {
            [self setZoomValue:[self zoomValue] + [event magnification]];
        }
        else
        {
            [self setZoomValue:0.45];
        }
    }
}

self - это подкласс IKImageBrowserView. У меня есть порог, чтобы zoomValue не мог быть меньше 0,45, но мне это нравится.

С наилучшими пожеланиями, Матиас, Программное обеспечение Eternal Storms

4 голосов
/ 04 мая 2010

Если вы добавите увеличение события к вашему коэффициенту масштабирования, то же событие не будет иметь тот же эффект в зависимости от текущего коэффициента масштабирования. Добавление увеличения 0.1 к коэффициенту увеличения 1 приведет к увеличению на 10%, но если коэффициент увеличения равен 0.1, добавление 0.1 удвоит масштаб.

Результат умножения коэффициента масштабирования на magnification + 1.0 будет более последовательным.

Я предпочитаю умножать коэффициент увеличения на std::exp(magnification), так как это кажется более естественным решением. Увеличение -n уменьшит масштаб точно на ту же величину, что увеличило увеличение n.

...