controlPage и жесты ... Смена страниц не работает? - PullRequest
1 голос
/ 22 мая 2011

Я создал действительно простое приложение с controlPage с тремя изображениями.Каждый раз, когда я нажимаю на точки в основе, страницы меняются.Все работает.Код, который я использовал:

@implementation myShareViewController

@synthesize  gestureStartPoint;

-(IBAction) changePage {
    switch ([pageControl currentPage]) {
    case 0:
        NSLog(@"changePage: In case 0");
        [view2 removeFromSuperview];
        [view3 removeFromSuperview];
        [[self view] addSubview:view1];
        break;
    case 1:
        NSLog(@"changePage: In case 1");
        [view1 removeFromSuperview];
        [view3 removeFromSuperview];
        [[self view] addSubview:view2];
        break;
    case 2:
        NSLog(@"changePage: In case 2");
        [view2 removeFromSuperview];
        [view1 removeFromSuperview];
        [[self view] addSubview:view3];
        break;

    default:
        break;
}
}

Затем я добавил следующий код для получения жестов (пролистывания)

#pragma mark -
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
     gestureStartPoint = [touch locationInView:self.view];
}
 -(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint currentPoisition = [touch locationInView:self.view];

CGFloat deltaX = fabsf(gestureStartPoint.x - currentPoisition.x);
CGFloat deltaY = fabsf(gestureStartPoint.y - currentPoisition.y);

if (deltaX >= kMinimumGestureLength && deltaY <= kMaximumVariance) {
    NSLog(@">> Begin >> Hor. Swipe detected. We are now in the page: %i", [pageControl currentPage]);
    [self changePage];
    NSLog(@">> End   >> Hor. Swipe detected. We are now in the page: %i", [pageControl currentPage]);

}
else if (deltaY >= kMinimumGestureLength && deltaX <= kMaximumVariance) {
    NSLog(@"Ver. Swipe detected");
}
}

Теперь жесты распознаются нормально, но страницы не изменяются,

Обновление с решением

UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)]; 
[self.view addGestureRecognizer:swipeRight]; 
[swipeRight release];

и добавление:

- (void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer 
{ 
    if (recognizer.direction == UISwipeGestureRecognizerDirectionRight)  
    {
        // advance page
    }
}

Ответы [ 2 ]

1 голос
/ 22 мая 2011

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

Обратите внимание, вы также можете использовать распознаватели жестов, предоставляемые платформой. Они немного уменьшают боль.

1 голос
/ 22 мая 2011

Итак, я предполагаю, что в ваших прикосновениях к обратному вызову вы видите что-то вроде:

Начало >> Хор. Размах обнаружен. Мы сейчас на странице: 0

Конец >> Хор. Размах обнаружен. Мы сейчас на странице: 0

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

Чтобы выполнить эту работу, вам нужно увеличить или уменьшить свойство currentPage PageControl на основе пользовательского пролистывания.

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