やや一般的なタイトルで申し訳ありませんが、誰かより良い提案があれば教えてください。
基本的に、3 つのスコアのみを表示するカスタム リーダーボード ビューを作成しています。可能であれば、現在のユーザーのスコアを中央に表示しますが、ユーザーがリストの一番上または一番下にいる場合は、3 つのスコアを表示する必要がありますが、リストの上または下に別のユーザーが表示されます。
例えば
- 私(私がトップの場合は、下の 2 を表示)
- ユーザー 1
- ユーザー 2
また
- ユーザー 1
- 私 (私が 2 つのスコアの真ん中にいる通常のケース)
- ユーザー 2
また
- ユーザー 1
- ユーザー 2
- 私 (私が最下位の場合は、2 つ上のスコアを表示)
これの最初の部分を実行する関数を作成しましたが、私が苦労しているエッジケースを考慮していません。誰でもアドバイスできますか?
-(void)getNearbyScores:(int)score{
GCLeaderboardScore *closestScoreAbove = nil; //Custom container for GC properties
GCLeaderboardScore *closestScoreBelow = nil; //Contains playerID, score, alias etc
if ([playerScores count] == 0){ //playerScores is an NSMutableDictionary
return;
}
for (NSString* key in playerScores) {
GCLeaderboardScore *playerScore = (GCLeaderboardScore *)[playerScores objectForKey:key];
if ((closestScoreAbove == nil || closestScoreAbove->score > playerScore->score) && playerScore->score > score){
closestScoreAbove = playerScore;
}
else if ((closestScoreBelow == nil || closestScoreAbove->score < playerScore->score) && playerScore->score < score){
closestScoreBelow = playerScore;
}
}
me->score = score;
me->rank = 1;
if (closestScoreAbove != nil) {
me->rank = closestScoreAbove->rank + 1;
nearbyScores = [NSMutableArray arrayWithObjects: closestScoreAbove, me, closestScoreBelow, nil];
}
else {
nearbyScores = [NSMutableArray arrayWithObjects: me, closestScoreBelow, nil];
}
}