【发布时间】:2014-11-01 08:56:39
【问题描述】:
我用一些相关的图像创建了一个教程,并在上面添加了一个页面控件。此外,我添加了一个滑动手势,它通过更改图片来响应。在下面的代码中,定义了一个 switch case,以便根据滑动的方向(左/右)决定下一个应该是哪个图像和点。
- (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;
}
现在唯一的问题是,当我向不同方向滑动时,页面控件会计算当前点两次。
【问题讨论】:
标签: ios objective-c