UIGestureRecognizer падает на <OS3.2 - PullRequest
1 голос
/ 10 ноября 2010

Этого и следовало ожидать, но я не могу найти среду выполнения, которая работает должным образом, так как кажется, что раньше это был частный API !!!!

На данный момент у меня и OS3.1.3 отвечает на селектор addGestureRecognizer !!!!

if ( [self.view respondsToSelector:@selector(addGestureRecognizer:)] ) {

        UIGestureRecognizer *recognizer;
        recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(morePress)];
        [self.view addGestureRecognizer:recognizer];
        recognizer.delegate = self;
        [recognizer release];


    }

Ответы [ 3 ]

3 голосов
/ 10 ноября 2010

Вы должны явно проверить версию системы:

NSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion];
if([currentSystemVersion compare:@"3.2"] == NSOrderedAscending) {
    //add gesture recognizer
} else {
    // :(
}
3 голосов
/ 10 ноября 2010

UIGestureRecognizer не поддерживается до iOS 3.2. Даже если метод addGestureRecognizer: существует, это не значит, что его безопасно использовать.

0 голосов
/ 05 ноября 2012

Это был действительно приватный API, который не поддерживался в версиях до 3.2.

Док Apple говорит:

Чтобы определить во время выполнения, можно ли использовать распознаватели жестов в ваше приложение, проверьте, существует ли класс, и, если это так, выделить экземпляр и посмотреть, отвечает ли он селектору locationInView :. Этот метод не был добавлен в класс до iOS 3.2.

Пример кода:

UIGestureRecognizer *gestureRecognizer = [[UIGestureRecognizer alloc] initWithTarget:self action:@selector(myAction:)];

if (![gestureRecognizer respondsToSelector:@selector(locationInView:)]) {
    [gestureRecognizer release];
    gestureRecognizer = nil;
}
// do something else if gestureRecognizer is nil

Explenation:

Чтобы определить, доступен ли класс во время выполнения в данной iOS релиз, вы обычно проверяете, является ли класс нулевым. К несчастью, этот тест не совсем точен для UIGestureRecognizer. Хотя этот класс был общедоступным, начиная с iOS 3.2, он был в развитие за короткий период до этого. Хотя класс существует в более ранний выпуск, использование его и других классов распознавания жестов не поддерживается в этом более раннем выпуске. Вы не должны пытаться использовать экземпляры этих классов.

Ознакомьтесь с полным текстом здесь .

...