滑动手势滑动UIViews
问题描述:
我想做滑动手势,连续滑动UIView
并从中获取数据。考虑每个UIView
中的每个单词。我将数据存储在数组中,并在转换时以UIView
的标签打印。但是当我显示所有数据程序停止工作后,试图刷卡时。我的项目显示没有错误。请帮助我。滑动手势滑动UIViews
这是我的数组:
addArray = [[NSMutableArray alloc]initWithCapacity:4];
[addArray insertObject:@"10" atIndex:0];
[addArray insertObject:@"20" atIndex:1];
[addArray insertObject:@"30" atIndex:2];
[addArray insertObject:@"40" atIndex:3];
flippedArray = [[NSMutableArray alloc] initWithCapacity:4];
[flippedArray insertObject:@"100" atIndex:0];
[flippedArray insertObject:@"200" atIndex:1];
[flippedArray insertObject:@"300" atIndex:2];
[flippedArray insertObject:@"400" atIndex:3];
这是我的手势识别编码:
-(void)swipegesture:(UISwipeGestureRecognizer *)recognizer{
CGPoint location = [recognizer locationInView:additionalView];
if (recognizer.direction==UISwipeGestureRecognizerDirectionLeft)
{
if (increment<[addArray count])
{
NSLog(@"%d",[addArray count]);
increment++;
if(increment==[addArray count])
{
NSLog(@"Fail");
//[recognizer requireGestureRecognizerToFail:swipeGesture];
[recognizer setEnabled:NO];
}
else
{
additionalLabel.text=[[NSString alloc] initWithFormat:@"%@",
[addArray objectAtIndex:increment]];
flippedLabel.text = [[NSString alloc] initWithFormat:@"%@",
[flippedArray objectAtIndex:increment]];
NSLog(@"increment %d",increment);
[UIView animateWithDuration:0.55 animations:^{
[UIView setAnimationDelay:0.2];
}];
CATransition *animation = [CATransition animation];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromRight];
[animation setTimingFunction:[CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionDefault]];
[animation setSpeed:0.4];
[[additionalView layer] addAnimation:animation forKey:nil];
}
}
}
else if(recognizer.direction==UISwipeGestureRecognizerDirectionRight)
{
if (increment>=0 && increment<[addArray count])
{
increment--;
if(increment>[addArray count])
{
additionalLabel.text=[[NSString alloc]initWithFormat:@"%@",
[addArray objectAtIndex:increment]];
flippedLabel.text=[[NSString alloc]initWithFormat:@"%@",
[flippedArray objectAtIndex:increment]];
NSLog(@"Decrement %d",increment);
[UIView animateWithDuration:0.55 animations:^{
[UIView setAnimationDelay:0.2];
}];
CATransition *animation = [CATransition animation];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromLeft];
[animation setTimingFunction:[CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionDefault]];
[animation setSpeed:0.4];
[[additionalView layer] addAnimation:animation forKey:nil];
}
}
}
}
这里有一个问题,而仅增加。我将NSLog
打印为FAIL。但是,如果它达到[addArray count]
的值,我不会如何停止手势识别器。
答
我会建议在有效性检查之前递增或递减您的索引值(您命名为increment),并且如果它不是有效的,则在其他操作中反转您的操作。像这样:
if (recognizer.direction==UISwipeGestureRecognizerDirectionLeft)
{
increment++;
if (increment<[addArray count])
{
// Your code
}
else
{
increment--; // The increment would pass the range of the array, set it back.
}
}
而且对于其他方向也是如此。
编辑:澄清,原来的问题是,你检查,以确保您的索引是有效的,但通过检查后增加最终使其无效。使用你的例子,当增量为3(数组的最高索引)时,它实际上小于数组的数量,即4。然后,将索引增加到4,这会超出范围,或者在的情况下,将陷入如果陈述(这将不再需要使用建议)并记录你的失败。
正好。如果(增量 Lefteris 2012-01-10 18:53:28
谢谢你这么多的伙计...真的,我很高兴看到你的答案... – 2012-01-11 05:59:37
它的工作完美.. 。 – 2012-01-11 06:00:03