ジェスチャーをスワイプして、uiviewsをスライドさせます
-
26-10-2019 - |
質問
スワイプジェスチャーをしてスライドさせたいです UIView
継続的にデータを取得します。それぞれの各単語を考慮してください UIView
. 。データを配列に保存し、ラベルに印刷しました UIView
移行中。しかし、すべてのデータプログラムが機能することを示した後、スワイプしようとすると、動作が停止します。エラーを示さない私のプロジェクト。それを手伝ってください。
これは私の配列です:
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
失敗として印刷します。しかし、それが価値に達した場合、私はジェスチャー認識を止める方法ではありません [addArray count]
.
解決
有効性チェックの前に、インデックス値(増分と名付けられた)を増やすか、削減することをお勧めします。そのようです:
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にインデックスを増やします。ケース、そのIFステートメント(提案を使用して必要ではなくなる)に分類され、失敗を記録します。
所属していません StackOverflow