Ios 向右滑动,页面控件的当前页面将更改,但点不会更改

Ios 向右滑动,页面控件的当前页面将更改,但点不会更改,ios,objective-c,Ios,Objective C,我通过一些重要的图片创建了一个教程,并在上面添加了一个页面控件。此外,我还添加了一个滑动手势,该手势通过更改图片进行响应。在下面的代码中,定义了一个开关盒,以便根据向左/向右滑动的方向确定下一个图像和点 - (IBAction)handleSwipe:(UISwipeGestureRecognizer *)sender { // NSLog(@"swiped"); NSArray *images; if (self.selectedRow == 0) {

我通过一些重要的图片创建了一个教程,并在上面添加了一个页面控件。此外,我还添加了一个滑动手势,该手势通过更改图片进行响应。在下面的代码中,定义了一个开关盒,以便根据向左/向右滑动的方向确定下一个图像和点

- (IBAction)handleSwipe:(UISwipeGestureRecognizer *)sender
{
//    NSLog(@"swiped");
    NSArray *images;

    if (self.selectedRow == 0) {
        images = [[NSArray alloc] initWithObjects:@"w8.JPG",@"w7.JPG",@"w6.JPG",@"w5.JPG",@"w4.JPG",@"w3.JPG", @"w2.JPG", @"w1.JPG" ,@"w9.JPG", nil];

        self.pageControl.hidden = NO;
        [self.pageControl setNumberOfPages:9];

        UISwipeGestureRecognizerDirection direction = [(UISwipeGestureRecognizer *) sender direction];

        switch (direction) {
            case UISwipeGestureRecognizerDirectionRight:
                if (pageController == 0 || imageIndex == 8)
                {
                    self.Oops = [[UIAlertView alloc] initWithTitle:@"Oops!" message:@"You cannot swipe to the left, there are not any previous steps." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
                    [self.Oops show];
                }
                else {
                    [self.pageControl setCurrentPage:pageController - 1];
                    pageController = pageController - 1;
                }
                imageIndex++;
                break;
            case UISwipeGestureRecognizerDirectionLeft:
                if (pageController < 8 && pageController >= 0) {
                    [self.pageControl setCurrentPage:pageController];
                    pageController = pageController + 1;
                }
                else {
                    [self.pageControl setCurrentPage: pageController ];
                    pageController = 0;
                }
                imageIndex--;
                break;
            default:
                break;
        }
        NSLog(@"pagecontroller is %li and imageIndex is %li " , pageController, imageIndex);
        imageIndex = (imageIndex < 0) ? ([images count] - 1): imageIndex % [images count];
        self.imageView.image = [UIImage imageNamed:[images objectAtIndex:imageIndex]];
    }
正如您在代码中看到的,有一个NSLog;当我运行应用程序时,一切正常,但当我向右滑动以查看前一幅图像时,尽管NSLog显示点和图像的所有索引都正确更改,并且我们看到了前一幅图像,但点不会更改。再次向右滑动,点会发生变化,但时间已晚,因为必须分类的图像和点的顺序变得混乱。例如,最后一张图像显示的是第一个点。 我确信我的算法是正确的,因为我用NSLog检查了它,而且在向右滑动之前一切都正常。 有什么想法吗

我对代码做了一些修改:

 switch (direction) {
            case UISwipeGestureRecognizerDirectionRight:
                if (pageController != 0 && imageIndex != 9) {
                    [self.pageControl setCurrentPage:(pageController - 1)];
                    pageController --;
                    imageIndex++;
                }
                break;
            case UISwipeGestureRecognizerDirectionLeft:
                if (pageController <= 8 && pageController >= 0) {
                    [self.pageControl setCurrentPage:pageController];
                    pageController = pageController + 1;
                    imageIndex--;
                }
                break;
            default:
                break;
        }
现在唯一的问题是,当我向不同的方向滑动时,页面控件会对当前点计数两次。

您的imageIndex++和imageIndex-行位于错误的位置。例如,如果pageController已经为0,您可能不想更改图像。将其移至:

-iBactionHandleSweep:UISweepGestureRecognitor*发送方 { // NSLog@swiped; NSArray*图像; 如果self.selectedRow==0{ images=[[NSArray alloc]initWithObjects:@w8.JPG、@w7.JPG、@w6.JPG、@w5.JPG、@w4.JPG、@w3.JPG、@w2.JPG、@w1.JPG、@w9.JPG、nil]; self.pageControl.hidden=否; [self.pageControl setNumberOfPages:9]; UISweepGestureRecognitzerDirection=[UISweepGestureRecognitzer*发送方方向]; 开关方向{ 案例UISweepGestureRecognitizerDirectionRight: 如果pageController==0 | | imageIndex==8 { self.Oops=[[UIAlertView alloc]initWithTitle:@Oops!消息:@您应该向左翻转。委托:nil CancelButtontTitle:@OK OtherButtontTitles:nil,nil]; [self.Oops show]; } 否则{ [self.pageControl setCurrentPage:pageController-1]; pageController=pageController-1; imageIndex++; } 打破 案例UISweepGestureRecognitizerDirectionLeft: 如果pageController<8&&pageController>=0{ [self.pageControl setCurrentPage:pageController]; pageController=pageController+1; 图像索引-; } 否则{ [self.pageControl setCurrentPage:pageController]; pageController=0; } 打破 违约: 打破 } NSLog@pagecontroller是%li,imageIndex是%li,pageController,imageIndex; imageIndex=imageIndex<0?[images count]-1:imageIndex%[images count]; self.imageView.image=[UIImage imagename:[images objectAtIndex:imageIndex]];
}我做到了。问题不仅存在,而且如果我们只向左滑动,每次到达终点时,最后一个图像都会到达第一个点。@pbasdf pageController和imageIndex的起始值是什么?imageIndex是8,pageController是0。@pbasdf