UISwipeGestureRecognizer жест жеста в iOS 3.2 - PullRequest
1 голос
/ 10 июля 2010

Я вижу в документации, что UISwipeGestureRecognizer доступно в iOS 3.2 и более поздних версиях.Я планировал использовать это для обнаружения жестов смахивания в моем Приложении.

Каковы будут последствия запуска моего приложения на старой iOS, скажем 3.1.3, если я реализую UISwipeGestureRecognizer?

Ответы [ 5 ]

3 голосов
/ 10 июля 2010

Если вы кодируете для обратной совместимости, то есть проверяете, что класс или метод существует, прежде чем использовать его, то пользователи до версии 3.2 просто не смогут провести пальцем по экрану.В противном случае вы должны пометить ваше приложение как требующее 3.2 или более позднюю версию.

Class c = NSClassFromString( @"UISwipeGestureRecognizer" );

if ( c ) {
  UISwipeGestureRecognizer *recognizer = [[c alloc] init];
} else {
  // pre 3.2 do something else
}
1 голос
/ 03 августа 2011

Я обнаружил, что для совместимости с 3.1.3 ...

Проверка для класса "UISwipeGestureRecognizer" была недостаточной.

Я, наконец, выбрал быстрое исправление, которое проверяет версию (хотя я не на 100% доволен ею):

+ (BOOL)isVersionSwipeable
{
    float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    return (version >= 3.2);
}
0 голосов
/ 12 июня 2011

Это правда, что до 3.2 UISwipeGestureRecognizer компилируется без предупреждений или ошибок, как указано ранее, но, однако, у меня возникла проблема по этому поводу. Мое приложение было скомпилировано, но когда я запустил свое приложение на iphone 3.1, UISwipeGestureRecognizer дважды обнаружил событие смахивания. Итак, я сделал условное кодирование. Моя реализация:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (version < 3.2) {
    UITouch *touch = [touches anyObject];
    startPosition = [touch locationInView:self];
    }
    [super touchesBegan:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (version < 3.2){

    UITouch *touch = [touches anyObject]; 
    CGPoint endPosition = [touch locationInView:self];

    if (endPosition.x-startPosition.x>30) { //difference between end and start must be min. 30 pixels to be considered as a swipe. if you change it as startPosition.x-endPosition.x you could detect left swipe
        [self handleSwipe]; //my swipe handler
    }
    }
    [super touchesEnded:touches withEvent:event];
}

и в другом методе, скажем, в viewdidload

float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (version >= 3.2){
   UISwipeGestureRecognizer  *swipe = [[UISwipeGestureRecognizer  alloc]
                                         initWithTarget:self action:@selector(handleSwipe)];

        [self addGestureRecognizer:swipe];
    }

Эта реализация избавляет вас от риска использования закрытого API, хотя сейчас оно не является частным. Кроме того, это устраняет проблему с повторяющимся проведением пальца.

0 голосов
/ 08 сентября 2010

В документации Apple говорится, что она доступна только в iOS 3.2 и более поздних версиях, но это еще не все!Код, использующий UISwipeGestureRecognizer, компилируется без ошибок или предупреждений, когда «Цель развертывания iPhone OS» - 3.1.3, и он отлично работает на моем устройстве 3.1.3.

Я предполагаю, что до 3.2 UISwipeGestureRecognizer считался «недокументированным API».».

0 голосов
/ 10 июля 2010

GestureRecognizer доступны только в> = iOS 3.2, поэтому вы все равно не сможете использовать их в iOS 3.1.3.

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