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